leetcode Two Sum
2015-03-04 17:11
316 查看
PS:下面贴的这个代码是二分查找的那个,不是那个用map的我再写一遍吧。
map代码:
PS: STL真的很好用啊!!!!
本来这个题呢,是O(n2)但是试了一下,没过,这个在预期内!!然后想到了,查找target-a[i]这种方法,排序要O(nlgn),后来仔细一想,我还要保存排序前的的数组下表,而且这好像也不像算法OJ的考察方式吧。然后找了下答案,最后发现其实和我保存的方式差不多,只不过,别人利用map把search target-a[i] 的时间降到了O(1)时间,这就是用stl的好处。
二分查找代码:
map代码:
#include<map> #include<iostream> #include<vector> using namespace std; vector<int> TwoSum(vector<int> numbers, int target) { vector<int> result; map<int, int> hmap; for (int i = 0; i < numbers.size(); i++) { int x = target - numbers[i]; if (hmap.count(x) == 0) { hmap.insert(pair<int, int>(numbers[i], i)); } else { int j = hmap[x]; result.push_back(j + 1); result.push_back(i + 1); return result; } } return result; } int main() { vector<int> a = { 2, 7, 13, 4 }; vector<int> b = TwoSum(a, 9); for (int i = 0; i < 2; i++) { cout << b[i] << " "; } }
PS: STL真的很好用啊!!!!
本来这个题呢,是O(n2)但是试了一下,没过,这个在预期内!!然后想到了,查找target-a[i]这种方法,排序要O(nlgn),后来仔细一想,我还要保存排序前的的数组下表,而且这好像也不像算法OJ的考察方式吧。然后找了下答案,最后发现其实和我保存的方式差不多,只不过,别人利用map把search target-a[i] 的时间降到了O(1)时间,这就是用stl的好处。
二分查找代码:
class Solution { public: vector<int> twoSum(vector<int> &numbers, int target) { sort(numbers.begin(),numbers.end()); int size = numbers.size(); vector<int> result; for (int i = 0; i < size; i++) { int t = target - numbers[i]; int p = i + 1; int r = size - 1; int q = (p+r) / 2; int j = i; while (p <= r) { if (numbers[q] == t) { j = q; break; } if (t<numbers[q]) { r = q - 1; q = (p + r) / 2; } else { p = q + 1; q = (p + r) / 2; } } if (j > i) { result.push_back(i + 1); result.push_back(j + 1); return result; } } return result; } };
相关文章推荐
- leetcode中第一题twosum问题解答算法的可行性证明
- leetcode之TwoSum[Java]
- LeetCode: Two Sum (Java)
- leetcode 167: Two Sum II - Input array is sorted
- LeetCode(Two Sum)
- LeetCode 编程练习 - Two Sum II - Input array is sorted学习心得
- LeetCode - 371 - Sum of Two Integers
- leetcode——Two Sum II - Input array is sorted
- 【LeetCode-面试算法经典-Java实现】【001-Two Sum(求两个数的和)】
- Leetcode Two Sum
- leetcode -- Two Sum II - Input array is sorted
- LeetCode: 1. Two Sum python
- Leetcode Two Sum II – Input array is sorted (Java)
- [Leetcode] 1.Two Sum(unordered_map)
- leetcode[Minimum Index Sum of Two Lists]//待整理多种解法
- 【Leetcode】Two Sum II #Too easy, just review hashmap
- Leetcode 1. Two Sum(python)
- [LeetCode] Two Sum III - Data structure design 两数之和之三 - 数据结构设计
- LeetCode--two-sum
- Two Sum_leetcode_#1