和為S的兩個數字

2021-08-09 06:08:39 字數 908 閱讀 6852

題目描述

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。

輸出描述:

對應每個測試案例,輸出兩個數,小的先輸出。

思路:陣列是遞增的,設定兩個指標,乙個指向陣列頭,乙個指向陣列尾,若兩個指標所指元素之和為s,則為滿足題意的一組數,若大於s,尾指標前移,若小於,頭指標後移。

1、如果有多對數字的和等於s,輸出兩個數的乘積最小的。遍歷,求出所有的滿足題意組合,求最小的

class solution 

else

if (array[first] * array[last] < min)

last--;

first++;

} else

if (array[first] + array[last] < sum) else last--;

}if (min == int_min) return

vector

();return

vector;}

};

2、距離最遠的兩個數,乘積是最小的,

證明:設y-x = d >= 0, x+y = s, 可得y = s-x, 2x+d = s, x = (s-d)/2, 進而

x*y = x(x+d) = (s-d)(s+d)/4 = (s^2 - d^2)/4,易知x*y是乙個關於遍量d的二次函式,開口向下,在x軸上遞減。

class solution  else

if (array[first] + array[last] < sum)

first++;

else last--;

}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...