剑指offer:57-题解 | #和为S的两个数字#

和为S的两个数字

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

题目描述


输入一个递增排序的数组array和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。

输入: [1,2,4,7,11,15],15 返回值: [4,11] 说明: 返回[4,11]或者[11,4]都是可以的


题解1:使用双层for循环 ---会超时


题解1:使用双指针


思路:由于是递增的有序数组,所以可以采用双指针 图示来自某位大佬,在此借鉴:

alt


class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
//         if(array.size() ==0) return {};
        //因为是有序的递增的数组,可以采用双指针
        int left = 0;
        int right =array.size()-1;
        int result = 0;//存放和
        while(left<=right){
            result = array[left] + array[right];
            if(result == sum){
                return {array[left],array[right]};
            }else if(result > sum){ // 结果值大于sum,那么就把right向左移动,指向更小的数值
                right--;
            }else// 结果值小于sum,那么就把left向右移动,指向更大的数值
                left++;
        }
        return {};
    }
};
全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务