Leetcode - Pointers/Array - Two sum
来源:互联网 发布:js button disabled 编辑:程序博客网 时间:2024/05/01 12:04
排序的方法
将数组排序,然后利用前后索引(numBegin指向数组前部,numEnd指向数组尾部)指向已经排序数组的前后元素。
根据下面规则,移动numBegin和numEnd。
1、numbers[numBegin]+numbers[numEnd]>target→numEnd--
2、numbers[numBegin]+numbers[numEnd]<target→numBegin++
3、numbers[numBegin]+numbers[numEnd]=target→numBegin和numEnd所指向的元素便为所求元素。
这时的numBegin和numEnd是所求元素在已经排序的数组内的位置,所以需要在原来数组中寻找所求元素的位置。
注:这里应该sort临时数组temp,不应该sort传递过来的numbers。
注:所求元素有可能值相等,需考虑。
class Solution {public: vector<int> twoSum(vector<int> &numbers, int target) { vector<int> temp=numbers; int numBegin=0; int numEnd=numbers.size()-1; vector<int> iRet; sort(numbers.begin(), numbers.end()); while(numBegin<numEnd) { if(numbers[numBegin]+numbers[numEnd]==target) { int first=0, second=0; for(int i=0;i<temp.size();i++) { if(temp[i]==numbers[numBegin]&&first==0) { first=i+1; continue; } if(temp[i]==numbers[numEnd]&&second==0) { second=i+1; continue; } if(first*second) break; } iRet.push_back(min(first,second)); iRet.push_back(max(first,second)); break; } if(numbers[numBegin]+numbers[numEnd]>target) numEnd--; if(numbers[numBegin]+numbers[numEnd]<target) numBegin++; } return iRet; }};
map的方法
利用map的下标索引性质:若没有该关键字,则生成该关键字并值初始化。如果map中没有target-numbers[i]该关键字,则将numbers[i]加入map,并赋值为下标号,有的话则OK啦。
class Solution {public: vector<int> twoSum(vector<int> &numbers, int target) { map<int, int> numMapper; vector<int> iRet; for (int i=0;i<numbers.size();i++) { if(numMapper[target-numbers[i]]>0) { iRet.push_back(numMapper[target-numbers[i]]); iRet.push_back(i+1); } else numMapper[numbers[i]]=i+1; } return iRet; }};
0 0
- Leetcode - Pointers/Array - Two sum
- [leetcode][two pointers] 3Sum
- [leetcode][array][two pointers] Merge Sorted Array
- [leetcode][two pointers][大数] 3Sum Closest
- [leetcode][two pointers] Minimum Size Subarray Sum
- LeetCode *** 15. 3Sum (Two Pointers )
- LeetCode *** 18. 4Sum (Two Pointers)
- Leetcode167 - Two Sum II - Input array is sorted(two pointers)
- 1.Two Sum leetcode(array)
- LeetCode-Array-1. Two Sum
- LeetCode刷题【Array】 Two Sum
- leetcode.array--1. Two Sum
- Array -- Leetcode problem1. Two Sum
- LeetCode(Array)---------Two Sum
- Array Two Pointers 总结
- Sum( two pointers )
- [leetcode][two pointers] Remove Duplicates from Sorted Array II
- LeetCode刷题【Array】 Two Sum II
- c# 容器的双缓冲
- 算法题:求数组中最小的k个数
- maven环境
- 用管道(pipe)使消息队列通知(mq_notify)可以在Select和poll中使用
- uva10405 - Longest Common Subsequence(LCS,最长公共子序列)
- Leetcode - Pointers/Array - Two sum
- 推荐一款Java代码Bug分析插件 FindBugs
- 虚函数之:构造和析构
- 解决cppunit编译错误,未定义的dlsym,dlopen和dlclose
- EXTJS的遮罩效果
- Activity之间数据传递onActivityResult
- 14.jQuery 工具函数
- NSString:创建,长度,取字符,是否以某字符串开头,结尾, 查找指定字符串的范围,截取,拼接,替换,比较,替换,数值转换,大小写转换
- 异或运算