輸入乙個遞增排序的陣列 和 乙個數字s,在陣列中查詢兩個數,使得它們的和正好為s,如果有多對數字的和等於s,
輸入兩個數的乘積最小的。
1、證明:第一次找到的兩個數為兩個數的成績最小。因為是排序好的數字。假設a有a+d =b+c =10;即有第乙個數為x,第二個數為(sum-x),且x乘積y=x(sum-x),sum為乙個已知數。要已知y最小,實際就是驗證乙個開口向下的拋物線的初中數學問題。
即abs(sum/2-x)最大,乘積最小,即最左邊或最右邊出現的數就是最小的乘積。由於是排序陣列,所以第一次出現的即為最小乘積組合。
2、思想為利用兩個指標,左邊從索引0的元素開始,右邊從索引n-1的元素開始。從兩側縮小滿足條件的範圍即可。
**如下:
vectorfindnumberswithsum(vectorarray,int sum)
else if(array[left]+array[right] left++;
else
right--;
}return res;
}
和為S的兩個數字
題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸入 每個測試案例包括兩行 第一行包含乙個整數n和k,n表示陣列中的元素個數,k表示兩數之和。其中1 n 10 6,k為int 第二行包含n個整數,每個陣列均為i...
和為S的兩個數字
輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。class solution public vectorfindnumberswithsum vectorarray,i...
和為s的兩個數字
輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。include using namespace std bool twonumberwithsum int data,i...