【剑指offer】和为s的两个数字

原创博文,转载请注明出处!

# 题目

image

# 思路

      首先定义两个指针,第一个指针p指向数组的第一个数字,第二个指针q指向数组的最后一个数字。如果p+q=s,则找到要找的数字;如果p+q<s,则p向后移动一个数字;如果p+q>s,则q向前移动一个数字。

image

# 代码

#include <iostream>
#include <vector>
using namespace std;
/* 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s。如果有多对数字的和等于s,输入任意一对即可*/

class Solution{
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum)
    {
        // 存储结果
        vector<int> res;

        // 特殊输入
        if(array.size() <= 1)
            return res;

        // 辅助变量
        int p = 0;
        int q = array.size()-1;
        int Sum = 0;
        // 查找结果
        while(p<q)
        {
            Sum = array[p] + array[q];

            if(Sum == sum)
            {
                res.push_back(array[p]);
                res.push_back(array[q]);
                cout<<array[p]<<endl;
                cout<<array[q]<<endl;
                break;
            }

            if(Sum < sum)
                ++p;
            else
                --q;
        }
        return res;
    }
};
int main()
{
    vector<int> data={1,2,4,7,11,13,14};
    int s =15;
    Solution solution;
    solution.FindNumbersWithSum(data,s);

    return 0;
}
原文地址:https://www.cnblogs.com/wanglei5205/p/8931180.html