給乙個包含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 ...