38 和為S的兩個數字

2021-08-18 01:36:09 字數 550 閱讀 2562

輸入乙個遞增排序的陣列 和 乙個數字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...