面試題57 和為s的是數字

2021-10-03 00:06:40 字數 1051 閱讀 7602

和為s的兩個數字。

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和為s,則輸出任意一對即可。

例如,輸入陣列和數字15。由於4+11=15,因此輸出4和11。

陣列是有序的,這個條件要合理利用,用兩個索引分別指向陣列的頭和尾,計算兩個索引對應值的和,如果小於s,那麼左索引需要右移,如果大於s,右索引需要左移。

package com.wsy;

public class main ;

int s = 15;

int start = 0, end = array.length - 1;

while (start < end) else if (sum > s) else

}system.out.println("沒有符合要求的值");

}}

和為s的連續正數序列。

輸入乙個正數s,列印出所有和為s的連續正數序列(至少含有兩個數)。例如,輸入15,由於1+2+3+4+5=4+5+6=7+8=15,所以列印出3個連續序列1~5、4~6和7~8。

這裡要求的是連續正數序列,那麼我們的關注點應該落在連續序列的start和end上。也就是說,只要我們確定了start和end,從start加到end的結果sum,比較一下,是否等於s。

下面分析start和end的範圍。start初始化為1,end初始化為2。計算從start到end的sum值,如果sum>s,那麼start++,從左側去掉乙個值。如果sums,讓start++,繼續尋找下乙個sum==s。考慮start和end的上界,當end-start==1 && start+end==s,start達到最大,於是,start上界是(s+1)/2,end的上界是(s+1)/2+1。

package com.wsy;

public class main

system.out.println();

start++;

end++;

} else if (result > s) else }}

}

劍指offer 面試題 57 和為 S 的數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。對應每個測試案例,輸出兩個數,小的先輸出。時間限制 1秒 空間限制 32768k 熱度指數 62731 思路 要找兩個數的和為s,並不難,但是如果存在多個符合這樣要求的數,...

面試題57 和為S的兩個數字

題意 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。思路 假設有兩個指標l,r分別在陣列的中,並且num l num r sum 因為這個陣列是有序的,很明顯我們可以知道 對於這個num l 所有的num r num ...

劍指offer 面試題57 和為s的數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。解決 public arraylistfindnumberswithsum int array,int sum else if array left array right...