和為S的兩個數字

2021-09-25 21:27:30 字數 866 閱讀 5538

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

對應每個測試案例,輸出兩個數,小的先輸出。
證明如下,清晰明了:

//輸出兩個數的乘積最小的。這句話的理解?

假設:若b>a,且存在,

a + b = s;

(a - m ) + (b + m) = s

:(a - m )(b + m)=ab- (b-a)m - m*m< ab;說明外層的乘積更小

也就是說依然是左右夾逼法!!!只需要2個指標

1.left開頭right指向結尾

2.如果和小於sum,說明太小了left右移尋找更的數

3.如果和大於sum,說明太大了right左移尋找更的數

4.和相等把left和right的數返回

class solution             

else if(tmpelse

}return vec;//也可能不存在滿足題意的,返回空

}};

和為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...