LeetCode----Two Sum
2017-02-26 22:36
691 查看
很久没有做过算法题了,脑子也不太好用了,趁着算法课的机会学习一下,这周选了最简单的第一题来做。
LeetCode Two Sum,题目如下所示:
由于一开始也没有特别多的思路,秉承着先做到再做好的信仰,用了两种方法:
(1)一开始使用了最暴力的方法,也就是使用两个循环,显然O(N2)的时间复杂度使得算法超时了。
(2)先对数组进行排序,由于排序会使位置发生改变,因此使用结构体记录下数值和位置,并使用两个指针一前一后进行遍,这样时间复杂度就降为了O(NlogN)
AC的代码如下:
struct Num {
int val, pos;
};
bool cmp(Num a, Num b) {
return a.val < b.val;
}
class Solution {
public:
vector<int> twoSum(vector<int> &nums, int target) {
vector<int> result;
vector<Num> Numbers;
for (int i = 0; i < nums.size(); i++) {
Num temp;
temp.val = nums[i];
temp.pos = i;
Numbers.push_back(temp);
}
sort(Numbers.begin(), Numbers.end(), cmp);
for (int i = 0, j = Numbers.size() - 1; i != j;) {
int sum = Numbers[i].val + Numbers[j].val;
if (sum == target) {
if (Numbers[i].pos < Numbers[j].pos) {
result.push_back(Numbers[i].pos);
result.push_back(Numbers[j].pos);
}
else {
result.push_back(Numbers[j].pos);
result.push_back(Numbers[i].pos);
}
break;
}
else if (sum < target)
i++;
else if (sum > target)
j--;
}
return result;
}
};
看了讨论还有时间复杂度为O(N)的算法,改天自己试试。
太久没做类似的题目了,感觉自己非常弱,就在解决这道非常简单的题目的过程中,很多基本的语法和一些基本的考虑都没做到,要加把劲了。
LeetCode Two Sum,题目如下所示:
由于一开始也没有特别多的思路,秉承着先做到再做好的信仰,用了两种方法:
(1)一开始使用了最暴力的方法,也就是使用两个循环,显然O(N2)的时间复杂度使得算法超时了。
(2)先对数组进行排序,由于排序会使位置发生改变,因此使用结构体记录下数值和位置,并使用两个指针一前一后进行遍,这样时间复杂度就降为了O(NlogN)
AC的代码如下:
struct Num {
int val, pos;
};
bool cmp(Num a, Num b) {
return a.val < b.val;
}
class Solution {
public:
vector<int> twoSum(vector<int> &nums, int target) {
vector<int> result;
vector<Num> Numbers;
for (int i = 0; i < nums.size(); i++) {
Num temp;
temp.val = nums[i];
temp.pos = i;
Numbers.push_back(temp);
}
sort(Numbers.begin(), Numbers.end(), cmp);
for (int i = 0, j = Numbers.size() - 1; i != j;) {
int sum = Numbers[i].val + Numbers[j].val;
if (sum == target) {
if (Numbers[i].pos < Numbers[j].pos) {
result.push_back(Numbers[i].pos);
result.push_back(Numbers[j].pos);
}
else {
result.push_back(Numbers[j].pos);
result.push_back(Numbers[i].pos);
}
break;
}
else if (sum < target)
i++;
else if (sum > target)
j--;
}
return result;
}
};
看了讨论还有时间复杂度为O(N)的算法,改天自己试试。
太久没做类似的题目了,感觉自己非常弱,就在解决这道非常简单的题目的过程中,很多基本的语法和一些基本的考虑都没做到,要加把劲了。
相关文章推荐
- 【LeetCode-数组篇】 1 Two Sum
- LeetCode 1. Two Sum
- LeetCode-1- Two Sum
- 【Leetcode】1. Two Sum
- [LeetCode] Two Sum
- leetcode Two Sum 每日一题 (。・∀・)ノ゙嗨
- Two Sum--leetcode
- LeetCode之1—-Two Sum
- LeetCode题解 —— 1. Two Sum
- Leetcode 1: two Sum
- leetcode第一题(medium)——Two Sum
- [leetcode] Two Sum
- LeetCode 1.Two Sum (Python)
- [LeetCode] 1. Two Sum
- LeetCode:Two Sum
- Leetcode Two Sum
- Leetcode 1. Two Sum
- leetcode(1) Two sum
- 【LeetCode】1. Two Sum
- LeetCode刷题:第1题Two Sum