和為s的兩個數字VS和為s的連續正數序列

2021-08-05 23:38:40 字數 1172 閱讀 5639

問題一

題目

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

例如:輸入陣列和數字15,輸出4和11。

分析

(1)最直觀的解法,時間複雜度為o(n^2)

兩個巢狀迴圈,

固定乙個數字,然後再後面找另乙個數字,看是否和為s。

(2)更快的解法,時間複雜度為o(n)

由於陣列是排序遞增的陣列,那麼找和為s的兩個數字,可以從前面找乙個小的,從後面找乙個大的。

bool findnumberswithsum(int arr, int len, int sum, int*num1, int *num2)

else

if (cursum < sum)

++begin;

else

--end;

}return

false;

}

問題二

問題

輸入乙個正數s,列印出所有和為s的連續正數序列(至少含有兩個正數)

例如輸入15,1+2+3+4+5=4+5+6=7+8 = 15

分析

這個問題,比上乙個問題,稍微難一些,但是借助上一問的思路,可以做出來。

定義兩個陣列,small和big,來作為序列的最小值和最大值。

初始化,samll = 1,big =2;

如果從small到big的序列的和大於s,那麼就從序列中去掉最小值,增大samll的值,再比較序列中的和是否大於s。迴圈,直到小於s。

如果從small到big的序列和小於s,那麼增大big,讓序列包含更多的值。

因為序列至少兩個數字,那麼small增加到 (1+s)/2。

void printsequence(int small, int big)

cout << endl;

}void findcontinuoussequence(int

sum)

++big;

cursum += big;

}}

和為s的兩個數字 VS 和為s的連續正數序列42

題目一 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。例如輸入陣列和數字15。由於4 11 15,因此輸出4和11。解題思路 先在陣列中選擇兩個數 第乙個數和最後乙個數 如果它們的和等於輸入的s,那麼就找到了數字。如果小於s...

和為S的兩個數字VS和為s的連續正數序列

題目 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。思路整理一下 最初我們找到陣列的第乙個數字和最後乙個數字。首先定義兩個指標,第乙個指...

和為S的兩個數字

題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸入 每個測試案例包括兩行 第一行包含乙個整數n和k,n表示陣列中的元素個數,k表示兩數之和。其中1 n 10 6,k為int 第二行包含n個整數,每個陣列均為i...