和为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的两个数字的主要内容,如果未能解决你的问题,请参考以下文章