首页 > 代码库 > 和为s的两个数字
和为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的两个数字
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。