题解 | #和为S的两个数字#

和为S的两个数字

http://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b

1 思路

还算一次AC吧

  • 读题:有序递增序列,两个数的和,做好边界的测试
  • 对于双指针,尤其右边指针的初始化要落实
  • 对于双指针的移动要想好 不同于初始化大小为1的窗口,这是大窗口变小!!

1.1 坑点

alt

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;
        
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务