《劍指offer》:[41]陣列中和為S的兩個數
題目:輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,是的它們的和正好是S。如果有多對數字的和等於S,輸出其中的一對即可。
例如輸入陣列{1,2,4,7,11,15}和數字15.由於4+11=15,因此輸出4和11。
方案一:時間複雜度為O(N*N)。順序查詢法,固定一個數,然後和剩餘的N-1個數做和,看和是否為S;如沒有,將固定的數下移一個,再與N-2個數字做和,看是否相等。很明顯,其時間複雜度為:O(N*N) 。
例如輸入陣列{1,2,4,7,11,15}和數字15.由於4+11=15,因此輸出4和11。
方案一:時間複雜度為O(N*N)。順序查詢法,固定一個數,然後和剩餘的N-1個數做和,看和是否為S;如沒有,將固定的數下移一個,再與N-2個數字做和,看是否相等。很明顯,其時間複雜度為:O(N*N) 。
方案二:時間複雜度為O(N)的查詢方法。因為陣列是有序的遞增的序列,我們可以定義兩個指標,第一個指標指向第一個,第二個指標指向第二個。如果這兩個數字的和小於S,則將第一個指標向後移,這樣得到的和就會變大;否則將第二個指標向前移動,這樣得到的和就會小於S。具體分析過程如下:
具體實現程式碼如下:
#include<iostream>
using namespace std;
int arr[6]={1,2,4,7,11,15};
bool FindNumberWithSum(int *array,int length,int sum,int *num1,int *num2)
{
bool found=false;
if(NULL==array ||length<=0)
return found ;
int ahead=length-1;
int behind=0;
while(behind<ahead)
{
int CurSum=array[behind]+array[ahead];
if(CurSum==sum)
{
*num1=array[behind];
*num2=array[ahead];
found=true;
break;
}
else if(CurSum > sum)
ahead--;
else
behind++;
}
return found;
}
int main()
{
int num1,num2;
bool result=FindNumberWithSum(arr,6,15,&num1,&num2);
if(result)
cout<<"陣列中和為15的兩個數為:"<<num1<<" "<<num2 <<endl;
else
cout<<"不存在兩個數的和S"<<endl;
system("pause");
return 0;
}
執行結果:
相關文章
- 尋找陣列中和為定值的兩個數陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 劍指Offer-把陣列中的數排成一個最小的數陣列
- 劍指 offer(1) -- 陣列篇陣列
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指Offer--陣列中重複的數字陣列
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 劍指Offer-34-把陣列排成最小的數陣列
- 【LeetCode刷題(簡單程度)】劍指 Offer 57. 和為s的兩個數字LeetCode
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 【劍指offer】7.旋轉陣列的最小數字陣列
- 劍指offer第41~50題
- 劍指offer之順序列印陣列陣列
- 力扣 - 劍指 Offer 45. 把陣列排成最小的數力扣陣列
- Leetcode 劍指 Offer 03. 陣列中重複的數字LeetCode陣列
- 【劍指offer】二維陣列中的查詢陣列
- 劍指 Offer 56 - I. 陣列中數字出現的次數陣列
- 劍指OFFER-數字在升序陣列中出現的次數(Java)陣列Java
- 劍指Offer-39-數字在排序陣列中出現的次數排序陣列
- 劍指offer | 09. 用兩個棧實現佇列佇列
- 劍指offer-用兩個棧實現佇列-php佇列PHP
- 劍指Offer-37-陣列中逆序對陣列
- 劍指offer之列印超過陣列一半的數字陣列
- 劍指offer——陣列中的逆序對C++(75%)陣列C++
- 【劍指offer】【1】二維陣列中的查詢陣列
- 秒殺劍指offer系列(41-50)
- 劍指offer——斐波那契數列
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- (python版)《劍指Offer》JZ06:旋轉陣列的最小數字Python陣列
- 劍指 Offer 57 - II. 和為s的連續正數序列
- nowcoder-劍指offer-二維陣列的查詢陣列
- 劍指 Offer 04. 二維陣列中的查詢陣列
- 劍指 Offer 42.連續子陣列的最大和陣列
- 劍指Offer-連續子陣列中的最大和陣列
- 二維陣列中的查詢——牛客劍指offer陣列
- 【劍指Offer】調整陣列順序使奇數位於偶數前面陣列
- 劍指Offer-31-最小的K個數