g*******d 发帖数: 495 | 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;
}
}; |
a******3 发帖数: 113 | 2 楼主这个是不是时间超时? two sum有O(n)的解法。 |
r*******e 发帖数: 7583 | 3 要求输出的是原始下标
你这一上来就sort,下标都乱了,结果能对么?
【在 g*******d 的大作中提到】 : 做hackerrank做的总是有一个test case过不去,郁闷了。转战leetcode。 : 目前C++用的相当不熟,临时看了看vector咋用 : 思路很简单,排序以后,两个下标从数组的两头向中间靠近。 : 我比较郁闷的是,提交以后说只有2个case过了,但是我找了4个最短的case心算一下都 : 没问题。 : 心想是不是C++用的太搓了,就这么点内容都搞错 : class Solution { : public: : vector twoSum(vector &numbers, int target) { :
|
g*******d 发帖数: 495 | 4 是啊,我真是做题做的脑子傻了
【在 r*******e 的大作中提到】 : 要求输出的是原始下标 : 你这一上来就sort,下标都乱了,结果能对么?
|
g*******d 发帖数: 495 | 5 下标乱掉的情况居然都能撞对两个case!!
【在 g*******d 的大作中提到】 : 是啊,我真是做题做的脑子傻了
|
l*****a 发帖数: 14598 | 6 输入为空跟只有一个元素?
【在 g*******d 的大作中提到】 : 下标乱掉的情况居然都能撞对两个case!!
|
g*******d 发帖数: 495 | 7 题目貌似是暗示说至少有俩元素吧
【在 l*****a 的大作中提到】 : 输入为空跟只有一个元素?
|
p*****p 发帖数: 379 | 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) { :
|
a***o 发帖数: 17 | 9 while(true)是不是改成 while(i<=j) ? 不然下标越界怎么办?
另外 numbers[i] + numbers[j] 只计算一次就够了吧? 用个变量存起来. |
g*******d 发帖数: 495 | 10 说的是……不过我这用C的土人没玩过hashmap,自己也写不了
要是支持Go,我就用map好了
【在 p*****p 的大作中提到】 : 排序不是O(n)的,O(n)用hashmap
|