LeetCode Two Sum
来源:互联网 发布:网络文件打不开 编辑:程序博客网 时间:2024/05/17 00:56
两个整数求和等于一个特定的值,返回这两个整数的下标,第一个数的下标要小于第二个数。
解题思路:
1.暴力搜索(O(n^2))
2.先对数据进行排序,然后查找(O(nlogn))
3.利用散列表(O(n))
对于第2种思路,可以建立一个一个struct,包含整数的值和下标,对值排序,并不影响返回的下标值。
代码如下:
struct node{ int val; int idx; node(){} node(int a,int b):val(a),idx(b){} }; bool compare(const node& a,const node& b){ return a.val<b.val; }class Solution {public: vector<int> twoSum(vector<int> &numbers, int target) { vector<int> ret(2,0); int size=numbers.size(); vector<node> adds(size); for(int i=0;i<size;i++){ adds[i]=node(numbers[i],i+1); } sort(adds.begin(),adds.end(),compare); int left=0; int right=size-1; while(left<right){ int sum=adds[left].val+adds[right].val; if(sum==target){ ret[0]=min(adds[left].idx,adds[right].idx); ret[1]=max(adds[left].idx,adds[right].idx); break; } else if(sum<target) left++; else right--; } return ret; }};
对于第3种思路,散列表可以提高查找的速度
代码如下:
class Solution {public: vector<int> twoSum(vector<int> &numbers, int target) { vector<int> ret(2,0); int size=numbers.size(); map<int,int> mp; for(int i=0;i<size;i++){ mp[numbers[i]]=i+1; } map<int,int>::iterator it=mp.end(); for(int i=0;i<size;i++){ it=mp.find(target-numbers[i]); if(it!=mp.end() && it->second!=i+1){ ret[0]=min(i+1,it->second); ret[1]=max(i+1,it->second); break; } } return ret; }};
0 0
- 【Leetcode】Two Sum (Sum)
- LeetCode: Two Sum
- LeetCode: Two Sum
- [Leetcode] Two Sum
- LeetCode : Two Sum
- Leetcode: Two Sum
- leetcode 46: Two Sum
- [LeetCode] Two Sum
- LeetCode 1 - Two Sum
- Leetcode : Two Sum
- 【leetcode】Two Sum
- [LeetCode]Two Sum
- leetcode Two Sum
- [Leetcode] Two Sum
- [leetcode] Two Sum
- LeetCode - Two Sum
- leetcode之Two Sum
- LeetCode | Two Sum
- ttf文件结构解析
- Android Animation
- OpenType字库文件
- DisplayMetrics类,怎么获得屏幕的宽度和高度
- JNI的替代者—使用JNA访问Java外部函数接口
- LeetCode Two Sum
- hive异常 show tables 无法使用 : Unable to instantiate rg.apache.hadoop.hive.metastore.HiveMetaStoreClient
- idf inverse document frequency
- 程序员的思想
- 计算2+4+6+...+100
- tomcat 原理(一)
- 产品经理要有特别的沟通技巧
- windows之查看字符集
- 线程的创建