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