面試題41 和為s的兩個數字,和為s的連續正數序列

2021-07-27 22:42:19 字數 937 閱讀 8342

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

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

思路:可以利用2個指標,分別指向陣列的第乙個元素和最後的乙個元素,如果兩元素之和大於我們輸入的和,則將第二個指標向左移一位,如果兩元素之和小於我們輸入的和,則將第乙個指標向右移一位。時間複雜度為o(n)。

bool findnumbers(int *a, int length, int *num1, int *num2, int sum)

s = a[low] + a[high];

}*num1 = a[low];

*num2 = a[high];

return ret;

}

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

1~5,4~6,7~8。

思路:同樣是使用兩個指標的思想,令low指向1,high指向2,當low和high指向的元素小於我們輸入的和時,則令high向右移動,若小於,則令low向右移動,直到high到(1+s)/2為止。

void findnumbers(int *num1, int *num2, int sum)

{ int low = 1;

int high = 2;

int s = low + high;

while(high <= sum/2+1)

{if(s > sum)

low++;

else if(s < sum)

high++;

else

{for(int i = low; i <= high; i++)

{cout<

面試題41 和為S的兩個數字和為S的連續整數序列

1.題目 輸入乙個遞增排序的陣列和數字s,在陣列中找到兩個數字使他們的和為s,如果存在多對數字的和為s,則輸出其中的一對即可。分析 例如對於陣列,以及要找的和為s,我們可以設定兩個指標,第乙個指標指向的是陣列的起始位置的值1,第二個指標指向的是末尾的數字15,計算兩個指標指向的數字的和,為16,判斷...

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

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

面試題57 和為s的數字(一)和為S的兩個數字

題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。開始時糾結乘積最小,後來轉念一想,a b sum,a和b越遠乘積越小,而一頭一尾兩個指標往內靠近的方法找到的就是乘積最小的情況。如果是乘積最大的情況就是一直找到兩...