查看: 7814| 回复: 18
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] LeetCode 新题 Two Sum II 求最佳解

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x


题目 :Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

是之前 two sum 的 fllow up question, 但是这次是given an array is already sorted in ascending order. 想尝试 O(log n)的时间做出来。但始终做不出来。有大神有想法吗?


上一篇:Leetcode如何刷最有效
下一篇:求分一个recursive function的复杂度
推荐
王可雪 2015-1-8 06:08:46 | 只看该作者
全局:
本帖最后由 王可雪 于 2015-1-8 06:58 编辑
xzt8350 发表于 2015-1-8 05:59
You may assume that each input would have exactly one solution. 题目说只有一个解。。 我也只能想出  ...

呃,写的时间太长了,忘了。这题当时倒是写过一个binary search的,但是感觉runtime是O(nlogn+n)。就是用BS左右找数,没有就换方向,缩小范围。
回复

使用道具 举报

推荐
mgccl 2015-1-11 18:13:36 | 只看该作者
全局:
本帖最后由 mgccl 于 2015-1-11 18:35 编辑

O(n)就最好了.

希望找到两个数加起来=0... 并且我们还有extra information... 负数和正数的分割点在哪里...
那么问题等同于给两个sorted array, 找里面有没有相同的数字(把其中的负数array反过来...)

然后可用adversary argument证明这个要O(n)时间.
回复

使用道具 举报

推荐
wenqiang88 2015-1-10 21:38:13 | 只看该作者
全局:
c__jay 发表于 2015-1-10 12:41
其实我经常都很不理解,因为实际应用情况下只要做一个table就能一劳永逸,当然我知道其实是偏题了- -因为 ...

没有动态输入吧,就是给你一个array。做table需要额外的空间,但是如果2个指针往中间移的话不需要
回复

使用道具 举报

🔗
王可雪 2015-1-8 05:57:14 | 只看该作者
全局:
感觉就是O(n),因为他要的是全部解,只不过省空间了。
回复

使用道具 举报

🔗
 楼主| xzt8350 2015-1-8 05:59:23 | 只看该作者
全局:
王可雪 发表于 2015-1-8 05:57
感觉就是O(n),因为他要的是全部解,只不过省空间了。

You may assume that each input would have exactly one solution. 题目说只有一个解。。 我也只能想出 O(n)
回复

使用道具 举报

🔗
yxyxyx 2015-1-8 06:11:02 | 只看该作者
全局:
我粗想了一下,应该没有O(logn)的解。因为要是想O(logn)大概就需要二分,但是这个题目里你没法保证每次去掉的那一半里没有正解需要的数。
比如数是12346,sum是5。先看1+6=7比5大,然后看1+3,比5小。现在问题来了。是选择2+3还是1+4?所以。。。
回复

使用道具 举报

🔗
 楼主| xzt8350 2015-1-8 07:56:12 | 只看该作者
全局:
yxyxyx 发表于 2015-1-8 06:11
我粗想了一下,应该没有O(logn)的解。因为要是想O(logn)大概就需要二分,但是这个题目里你没法保证每次去掉 ...

你这个例子不成立 题目中说每组数只有一组解
回复

使用道具 举报

全局:
既然already sorted就直接用Two pointers从两头开始往中间找
回复

使用道具 举报

🔗
yxyxyx 2015-1-9 02:45:36 | 只看该作者
全局:
xzt8350 发表于 2015-1-7 19:56
你这个例子不成立 题目中说每组数只有一组解

那样就12478,然后sum是6.
还是一样的问题,1+8比6大,于是看中间的数,1+4比6小。要是从二分的角度去做下一步就应该是看4和7,这显然是不对的,因为答案是2和4.
回复

使用道具 举报

🔗
c__jay 2015-1-10 12:14:51 | 只看该作者
全局:
把全部和做成一个table然后再查?不过不知道求和的过程要不要算进时间就是了
回复

使用道具 举报

🔗
wenqiang88 2015-1-10 12:16:58 | 只看该作者
全局:
c__jay 发表于 2015-1-10 12:14
把全部和做成一个table然后再查?不过不知道求和的过程要不要算进时间就是了

这个肯定要算的吧...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表