美文网首页
递增数组中寻找和正好是S的数

递增数组中寻找和正好是S的数

作者: AlwaysFrank | 来源:发表于2016-09-14 15:10 被阅读0次
    1. 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,保存他们的下标。
    2. 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

    首先,这是一个有序的递增数组。从头到尾,首尾相加,求是否大于求和的值,然后进行调整。如果小于了左边可以右移,大于S的话右边界左移。

    #include <iostream>
    #include <vector> 
    using namespace std;
    //找出所有和为定值的数的下标  从1计数
    vector< pair<int,int>> getSumNum(vector<int> &arr,int Sum)
    {
        vector<pair<int,int>> vec;
        int i,j;
        int len = arr.size()-1;
        for(i = 0, j = len; i < j ;)
        {
            if(arr[i] + arr[j] == Sum){
                vec.push_back(make_pair(i+1,j+1));
                i++;
                j--;
            }
            else if(arr[i] + arr[j] < Sum)
                i++;
            else
                j--;
        }
        return vec;
    }
    //找乘积最小就是第一个,如果是乘积最大就求中位数的两个值比较一下就OK啦 
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            vector<pair<int,int>>  temp = getSumNum(array,sum);
            vector<int> result;
            result.push_back(array[temp[0].first-1]);//从0计数
            result.push_back(array[temp[0].second-1]);
            return result;
    }
    
    int main(){
        vector<int> n={1,2,4,5,7,9,11};
        vector<pair<int,int>>  temp = getSumNum(n,9);
        for(auto t:temp){
            cout<<t.first<<" "<<t.second<<endl;
        } 
        vector<int>  tp = FindNumbersWithSum(n,9);
        for(auto t:tp){
            cout<<t<<endl;
        }
    }
    

    相关文章

      网友评论

          本文标题:递增数组中寻找和正好是S的数

          本文链接:https://www.haomeiwen.com/subject/spmvettx.html