您的位置:首页 > 职场人生

[LeetCode] Two Sum

2013-01-29 00:39 435 查看
struct Wrapper {
int val;
int pos;
};

bool compare(const Wrapper &w1, const Wrapper &w2) {
return w1.val < w2.val;
}

class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<Wrapper> v;

for (int i = 0; i < numbers.size(); i++) {
Wrapper w;
w.val = numbers[i];
w.pos = i + 1;
v.push_back(w);
}

sort(v.begin(), v.end(), compare);

vector<int> ret;

int l = 0;
int r = v.size() - 1;

while (l <= r) {
int sum = v[l].val + v[r].val;

if (sum == target) {
int m = max(v[l].pos, v[r].pos);
int n = min(v[l].pos, v[r].pos);
ret.push_back(n);
ret.push_back(m);

return ret;
} else if (sum < target) {
l++;
} else {
r--;
}
}

return ret;
}
};


Small Case: 12ms

Large Case: 12ms

Time: O(nlgn)

Space: O(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息