[LeetCode]Two Sum
2014-07-23 18:33
295 查看
思路:
最直接的方式用两个for循环枚举所有的情况,时间复杂度O(n^2),超时,需要优化。提供两种方法(都需要提前排序):1)先排序,固定一个数a,在剩下的数中二分查找b满足条件(a+b=target),复杂度O(nlogn);2)先排序,用两个指针
i 和 j(一个指向头,一个指向尾),比较num[i]+num[j]与target的大小,如果前者小,则 i++;前者大,则 j--;相等或 i==j 结束。
代码:
Accepted 1:
Accepted 2:
最直接的方式用两个for循环枚举所有的情况,时间复杂度O(n^2),超时,需要优化。提供两种方法(都需要提前排序):1)先排序,固定一个数a,在剩下的数中二分查找b满足条件(a+b=target),复杂度O(nlogn);2)先排序,用两个指针
i 和 j(一个指向头,一个指向尾),比较num[i]+num[j]与target的大小,如果前者小,则 i++;前者大,则 j--;相等或 i==j 结束。
代码:
Accepted 1:
struct node { int n,iid; }num[10000000]; bool cmp(node x,node y) { return x.n<y.n; } class Solution { public: vector<int> twoSum(vector<int> numbers, int target) { int l=numbers.size(); int res1,res2; int i,j; vector<int> cnt; for(i=0;i<l;i++) { num[i].n=numbers[i]; num[i].iid=i+1; } sort(num,num+l,cmp); for(i=0;i<l;i++) { int d=target-num[i].n; int t=i+1,r=l-1,mid; while(t<=r) { mid=(t+r)/2; if(num[mid].n>d) r=mid-1; else if(num[mid].n<d) t=mid+1; else { res1=num[i].iid; res2=num[mid].iid; break; } } } cnt.push_back(min(res1,res2)); cnt.push_back(max(res1,res2)); return cnt; } };
Accepted 2:
struct node { int id,n; }num[100000]; bool cmp(node a,node b) { return a.n<b.n; } class Solution { public: vector<int> twoSum(vector<int> &numbers, int target) { int len=numbers.size(); int i,j; vector<int> cnt; for(i=0;i<len;i++) { num[i].n=numbers[i]; num[i].id=i+1; } sort(num,num+len,cmp); i=0,j=len-1; while(i<j) { int ans=num[i].n+num[j].n; if(ans<target) i++; else if(ans>target) j--; else break; } cnt.push_back(min(num[i].id,num[j].id)); cnt.push_back(max(num[i].id,num[j].id)); return cnt; } };
相关文章推荐
- leetcode(1)Two Sum
- Two Sum 分类: Leetcode(线性表) 2015-02-04 10:05 57人阅读 评论(0) 收藏
- Leetcode:1. Two Sum
- leetCode: two Sum
- [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
- [LeetCode]Two Sum
- leetcode---Two Sum
- LeetCode---1. Two Sum
- [leetcode] 1. Two Sum
- [LeetCode 解题报告]001.Two Sum
- leetcode.-1.Two Sum
- Leetcode1:Two Sum
- leetcode--Two Sum--无序关联容器--hash map
- LeetCode题目:1. Two Sum