和为s的两个数字

Posted 去做点事情

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了和为s的两个数字相关的知识,希望对你有一定的参考价值。

 牛客上要求返回乘积最小的,实际上不用麻烦去写另外一个函数,第一次找到两个数字的乘积就一定是最小的。

在调试程序时也遇到两个问题:

1.既然用到了vector容器,头文件就应该声明#include<vector>

2.vector的初始化的一种方式:

  int b[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
    vector<int> base(b,b+20);

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> result;
        if(array.size() <= 0)
            return result;
        vector<int>::iterator first = array.begin();
        vector<int>::iterator last = array.end() - 1;
        while(first < last){
            int number = *first + *last;
            if(number == sum){
                result.push_back(*first);
                result.push_back(*last);
                first++;
                last--;
            }
            else if(number < sum)
                first++;
            else
                last--;
        }
        if(result.size() > 2)
            return Findsmall(result);
        else
            return result;
    }
    vector<int> Findsmall(vector<int> array){
        int length = array.size();
        int pair = length/2;
        vector<int> result(2,0);
        int small = 999999;
        for(int i = 0;i < pair;i++){
            int num = array[2*i]*array[2*i+1];
            if(num < small){
                result[0] = array[2*i];
                result[1] = array[2*i+1];
                small = num;
            }
        }
        return result;
    }
};

 在编写过程中出现了两个问题:

1.last初始化出现错误。因为vector的.end是vector中最后一个存储元素的下一个,即空,如果需要表示最后一个元素,必须减1。

2.vector<int> result(2,0);

 这句话之前错误的形式是vector<int> result;,这句话本身没有错误,是result的定义,但没有进行初始化。因为没有初始化,后面的result[0]result[1]就要报数组越界的错误,因为本身result是空的。

 result(2,0),第一个参数是长度,第二个才是具体的数值。

 

以上是关于和为s的两个数字的主要内容,如果未能解决你的问题,请参考以下文章

最强解析面试题:和为S的两个数字

和为s的两个数字

[剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列

剑指offer 42.和为S的两个数字

[算法]和为S的两个数字

和为S的两个数字VS和为S的连续正数序列