Redian新闻
>
Leetcode Two Sum,我这个O(n)解法为啥不讨服务器的好呢
avatar
Leetcode Two Sum,我这个O(n)解法为啥不讨服务器的好呢# JobHunting - 待字闺中
g*d
1
做hackerrank做的总是有一个test case过不去,郁闷了。转战leetcode。
目前C++用的相当不熟,临时看了看vector咋用
思路很简单,排序以后,两个下标从数组的两头向中间靠近。
我比较郁闷的是,提交以后说只有2个case过了,但是我找了4个最短的case心算一下都
没问题。
心想是不是C++用的太搓了,就这么点内容都搞错
class Solution {
public:
vector twoSum(vector &numbers, int target) {

sort(numbers.begin(), numbers.end());
vector result(2);
int i=0, j=numbers.size()-1;
while(true){
if (numbers[i] + numbers[j] == target){
result[0] = i+1;
result[1] = j+1;
break;
}
if (numbers[i] + numbers[j] > target){
j--;
}
if (numbers[i] + numbers[j] < target){
i++;
}
}
return result;
}
};
avatar
a*3
2
楼主这个是不是时间超时? two sum有O(n)的解法。
avatar
r*e
3
要求输出的是原始下标
你这一上来就sort,下标都乱了,结果能对么?

【在 g*******d 的大作中提到】
: 做hackerrank做的总是有一个test case过不去,郁闷了。转战leetcode。
: 目前C++用的相当不熟,临时看了看vector咋用
: 思路很简单,排序以后,两个下标从数组的两头向中间靠近。
: 我比较郁闷的是,提交以后说只有2个case过了,但是我找了4个最短的case心算一下都
: 没问题。
: 心想是不是C++用的太搓了,就这么点内容都搞错
: class Solution {
: public:
: vector twoSum(vector &numbers, int target) {
:

avatar
g*d
4
是啊,我真是做题做的脑子傻了

【在 r*******e 的大作中提到】
: 要求输出的是原始下标
: 你这一上来就sort,下标都乱了,结果能对么?

avatar
g*d
5
下标乱掉的情况居然都能撞对两个case!!

【在 g*******d 的大作中提到】
: 是啊,我真是做题做的脑子傻了
avatar
l*a
6
输入为空跟只有一个元素?

【在 g*******d 的大作中提到】
: 下标乱掉的情况居然都能撞对两个case!!
avatar
g*d
7
题目貌似是暗示说至少有俩元素吧

【在 l*****a 的大作中提到】
: 输入为空跟只有一个元素?
avatar
p*p
8
排序不是O(n)的,O(n)用hashmap

【在 g*******d 的大作中提到】
: 做hackerrank做的总是有一个test case过不去,郁闷了。转战leetcode。
: 目前C++用的相当不熟,临时看了看vector咋用
: 思路很简单,排序以后,两个下标从数组的两头向中间靠近。
: 我比较郁闷的是,提交以后说只有2个case过了,但是我找了4个最短的case心算一下都
: 没问题。
: 心想是不是C++用的太搓了,就这么点内容都搞错
: class Solution {
: public:
: vector twoSum(vector &numbers, int target) {
:

avatar
a*o
9
while(true)是不是改成 while(i<=j) ? 不然下标越界怎么办?
另外 numbers[i] + numbers[j] 只计算一次就够了吧? 用个变量存起来.
avatar
g*d
10
说的是……不过我这用C的土人没玩过hashmap,自己也写不了
要是支持Go,我就用map好了

【在 p*****p 的大作中提到】
: 排序不是O(n)的,O(n)用hashmap
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。