1. 程式人生 > >和為s的兩個數字

和為s的兩個數字

最小 else 初始化 air 應該 small ++ while iterator

牛客上要求返回乘積最小的,實際上不用麻煩去寫另外一個函數,第一次找到兩個數字的乘積就一定是最小的。

在調試程序時也遇到兩個問題:

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的兩個數字