题解 | #和为S的两个数字#
和为S的两个数字
http://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b
1 思路
还算一次AC吧
- 读题:有序递增序列,两个数的和,做好边界的测试
- 对于双指针,尤其右边指针的初始化要落实
- 对于双指针的移动要想好 不同于初始化大小为1的窗口,这是大窗口变小!!
1.1 坑点
2 code
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> retV;
// if(NULL == array) {
// return retV;
// }
if(1 >= array.size()){//at least 2个
return retV;
}
if(0>= sum ){
return retV;
}
//序列已经有序,典型双指针(不是小窗口启动那种哈);
int left=0, right= array.size()-1 , localSum = 0;
while( left < right){
localSum= array[left]+array[right];
//sum lower
//区分窗口大小
if(localSum <sum){
left++;
}
//sum higher
else if( localSum>sum){
right--;
}
//sum equal
else{
retV.push_back(array[left]);
retV.push_back(array[right]);
break;
}
}//while
return retV;
}
};