14 在排序陣列中查詢和為給定值的兩個數字

2021-05-26 17:43:34 字數 627 閱讀 2704

題目:輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。

要求時間複雜度是o(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。

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

分析:如果我們不考慮時間複雜度,最簡單想法的莫過去先在陣列中固定乙個數字,再依次判斷陣列中剩下的n-1個

數字與它的和是不是等於輸入的數字。可惜這種思路需要的時間複雜度是o(n2)。

思路二:最初我們找到陣列的第乙個數字和最後乙個數字。當兩個數字的和大於輸入的數字時,把較大的數字

往前移動;當兩個數字的和小於數字時,把較小的數字往後移動;當相等時,打完收工。這樣掃瞄的順序是從陣列的

兩端向陣列的中間掃瞄。

#include

using namespace std;

bool findsum(int * a ,int length,int sum,int &x,int &y)

return f;

}int main()

;int x,y;

bool f=findsum(a,6,15,x,y);

if(f)

cout<

}

在排序陣列中查詢和為給定值的兩個數字

14 題目 輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。思路 由於陣列為公升序,因...

100題 在排序陣列中查詢和為給定值的兩個數

在排序陣列中查詢和為給定值的兩個數 include using namespace std bool findnum int data,unsigned int length,int sum,int n1,int n2 int ahead length 1 int behind 0 while ah...

未排序陣列中累加和為給定值的最長子陣列系列問題

牛客網左程雲第二課第三題,這是乙個很重要的演算法原型。問題 給定乙個無序陣列 arr,其中元素可正 可負 可 0,給定乙個整數 k。求 arr 所有的子陣列中累加和為 k 的最長子陣列長度。要求 時間複雜度 o n 分析 本題和未排序正數陣列中累加和為給定值的最長子陣列長度這個問題的區別在於,陣列中...