和為S的兩個數字

2021-08-25 14:01:17 字數 590 閱讀 1381

題目:

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

輸出:

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

思路:做這道題時一開始沒有好的思路,定義個map並遍歷陣列元素,滿足條件的插入到map中,最後再遍歷map,但這樣的思路的時間複雜度比較高,oj沒有通過。

其實有一種思路十分巧妙,定義左右指標,最難想到的就是和相等的左右指標距離越遠他們的乘積就會越小。

例如:

1+5=6

2+4=6

3+3=6

和相等的兩個數的乘積為

1*5=5

2*4=8

3*3=9

所以,和相等的兩個數相差越大乘積越小。

class solution 

else

if(tmpsum > sum)

right--;

else

left++;

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