九章演算法 騰訊面試題 四數之和

2021-10-14 02:14:55 字數 1704 閱讀 6899

給乙個包含n個數的整數陣列s,在s中找到所有使得和為給定整數target的四元組(a, b, c, d)。

四元組(a, b, c, d)中,需要滿足a <= b <= c <= d

答案中不可以包含重複的四元組。

lintcode 領扣

輸入:[2,7,11,15],3 

輸出:

輸入:[1,0,-1,0,-2,2],0 

輸出:

[[-1, 0, 0, 1]

,[-2, -1, 1, 2]

,[-2, 0, 0, 2]]

dfs:

樸素dfs,對排序後的佇列進行搜尋每次選取當前數後的比當前值大的數壓入list,當list大小為4的時候判斷是否四個元素的和為taeget

空間複雜度o(n*n)

雙指標:

雖然題目是四數之和,但是我們可以將他轉換為三數之和,再進一步就是二數之和,先進行穩定排序,然後我們準備用四個指標

那麼問題就被化簡了,先框定兩個指標,再在這個基礎上,用雙指標解決問題,當頭指標和尾指標的元素之和大於new_target,尾指標-1(因為頭指標+1的結果肯定大於new_target),同理當頭指標和尾指標的元素之和小於new_target,頭指標+1。

空間複雜度 o(n^2)

//dfs 

public

class

solution

private

void

dfs(int

numbers

,list

<

integer

>

list

,int

target

,list

<

list

<

integer

>>

ans,

intindex

)return;}

for(

inti

=index;i

<

numbers

.length;i

++)//選取當前元素

list

.add

(numbers[i

]);dfs

(numbers

,list

,target

-numbers[i

],ans,i

+1);list

.remove

(list

.size()-

1);}}

}//雙指標

public

class

solution

intleft=j

+1,right

=size-1

;//第三第四個指標

while

(left

<

right

)elseif(

sum<

target

)else}}

}for

(list

<

integer

>

tmp:

res)

return

ans;

}}

更多題解參考:九章演算法

九章演算法 Amazon 面試題 數飛機

給出飛機的起飛和降落時間的列表,用序列 interval 表示.請計算出天上同時最多有多少架飛機?如果多架飛機降落和起飛在同一時刻,我們認為降落有優先權。lintcode 領扣 輸入 1,10 2,3 5,8 4,7 輸出 3 解釋 第一架飛機在1時刻起飛,10時刻降落.第二架飛機在2時刻起飛,3時...

九章演算法面試題1 落單的數

初階 有2n 1個數,其中2n個數兩兩成對,1個數落單,找出這個數。要求o n 的時間複雜度,o 1 的空間複雜度。高階 如果有2n 2個數,其中有2個數落單,該怎麼辦?初階 將2n 1個數異或起來,相同的數會抵消,異或的答案就是要找的數。高階 假設兩個不同的數是a和b,並且a b,將2n 2個數異...

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...