求陣列中和為固定數的所有對

2021-05-25 10:43:49 字數 1802 閱讀 7604

題目:輸入乙個已經按公升序排序過的陣列和乙個數字,

在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。

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

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

方案一:

int iarrary[10] = ;

//先排序,就暫時選個簡單的來排序吧

for(int i = 0; i < 9; i++)

int j;

int swap;

int minindex = i;

for(j = i+1; j < 10; j++)

if(iarray[minindex] > iarray[j])

minindex = j;

else

continue;

swap = iarray[minindex];

iarray[minindex] = iarray[i];

iarray[i] = swap;

//求漸進大小的數

int ihead = 0, itail = 9;

while( ihead != itail)

if(iarray[ihead] + iarray[itail] > sum)

itail--;

else if(iarray[ihead] + iarray[itail] < sum)

ihead++;

else if(iarray[ihead] + iarray[itail] == sum)

printf("%d:%d, %d,%d/n", ihead,iarray[ihead], itail, iarray[itail]);

else

printf("cannot find the sum/n");

方案二:

假設給定陣列元素為m個,即:src[m],給定的和為sum,我們首先開闢sum個陣列空間tmp[sum],初始值都為0,

然後從頭到尾遍歷給定,對於src[i],我們查詢tmp[sum-src[i]]是否為1,如果為1,輸出兩個數即可,否則

將tmp[src[i]]置為1(即此數已經存在),這樣只需遍歷一次即可找出所有的一對數。

缺點:以上演算法有兩個明顯缺點,

1. 演算法假定所給數都為非負數,當為負數時下標無效

解決方法:判斷第乙個數是否為負數(公升序),若為負數,給所有數都加上第乙個數的相反數,使得都為正即可

2.分析演算法的空間複雜度:假如極端情況m很小且sum非常大,這樣我們浪費了巨大的空間(例如m=10,sum=1億)

解決方法:使用hash雜湊的方法,這就是我們要說的方法二

解法三:

針對方法一空間複雜度的問題,提出hash雜湊的方法,hash函式為f(x) = x mod m

hash雜湊空間大小設定為m/0.8來減少衝突,hash空間初始值全部置為null,

對於有衝突的解決,我們使用線性鍊錶的儲存方式,先定義鍊錶節點

view plaincopy to clipboardprint?

01.typedef struct _node  

02.node; 

typedef struct _node

node;

遍歷給定陣列,像解法一一樣,對於首項為負的數字,加上其相反數即可,

對於掃瞄的每個數xi,我們查詢f(sum-xi)是否存在,如果存在,輸出兩個數,

否則繼續遍歷下乙個數,直到所有數都遍歷完一遍,這樣一次掃瞄就可以找到

所有滿足條件的一對數。

演算法的具體實現待定...

阿里巴巴筆試題 求陣列中和為給定數所有的組合

一 問題描述 給定乙個數t,以及n個整數,在這n個數中找到加和為t的所有組合,例如t 4,n 6這6個數為 4,3,2,2,1,1 這樣輸出就有4個不同的組合它們的加和為4 4,3 1,2 2,and 2 1 1。請設計乙個高效演算法實現這個需求。二 解題思路 先將資料按從大到小進行排序,然後使用回...

第二十一題(求陣列中和為特定數的所有組合)

第21 題 2010 年中興面試題 程式設計求解 輸入兩個整數n 和m,從數列1,2,3.n 中隨意取幾個數,使其和等於m 要求將其中所有的可能組合列出來.採用遞迴的方式實現 每個數字參與求和或者不參與,通過鍊錶record記錄參與求和的數字 終止條件為index n,此時說明求和失敗 當index...

求陣列中和最大的子陣列

題目一 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每 個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n cpp view plain copy include stdio.h include conio.h 求一維陣列的最大連續子陣列元素之...