輸入乙個已經按公升序排序過的陣列和乙個數字k,
在陣列中查詢兩個數,使得它們的和正好是k。
要求時間複雜度是
o(n)
。如果有多對數字的和等於輸入的數字,輸出任意一對即可。
例如輸入陣列1、
2、4、
7、11、
15和數字
15。由於
4+11=15
,因此輸出4和
11。兩種思路
①設定兩個指標,begain指向陣列的第乙個元素,end指向最後乙個元素,判斷兩個數的和,若小於k,則begain後移,反之end遷移,直到找到符合要求的兩個數或兩指標相遇 ②
取最後陣列中最後乙個數(最大數)max,new乙個大小為max的陣列b,對於每個元素a[i],令b[ a[i] ]=1,其餘元素為0。
(類似雜湊表)
然後遍歷a,若b[ sum – a[i] ]==1,則找到這樣的一堆數。
滿足時間複雜度為on的要求,但空間複雜度可能很大。。。。
思路一:
#pragma once
#includeusing namespace std;
void match(int a, int size,int sum)
else
if (a[begain] + a[end] > sum)
end--;
else
begain++;
} if (!found)
cout << "there is no such kind of match" << endl;
}void main()
; int sum = 15;
match(a, 6, sum);
system("pause");
}
在排序陣列中查詢和為定值的兩個元素
題目 已知乙個已經按公升序排好序的陣列,現在輸入乙個數值sum,在陣列中查詢兩個數,使得這兩個數的和正好是輸入的sum,列印出這兩個數,如果存在多對這樣的數,依次列印出來。如 array 輸入sum 28,那麼列印出 8,20 10,18 演算法思想1 最傻瓜的演算法,先在陣列中固定乙個值,然後依次...
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...
尋找和為定值的兩個數
尋找和為定值的兩個數 給定乙個陣列 無序或者有序,兩種情況都要考慮 找出和為m的兩個數。最多時間複雜度能有多少?陣列有序的情況,在時間複雜度上我們就省去了排序的o nlogn 我們使用兩端指標掃瞄法是比較簡單的,時間複雜度為o n 空間複雜度為o 1 如下圖所示 然後,判斷它們指向的值之和sum是否...