劍指offer刷題(2) 4sum

2021-10-07 00:14:24 字數 1061 閱讀 5744

給出乙個有n個元素的陣列s,s中是否有元素a,b,c和d滿足a+b+c+d=目標值?找出陣列s中所有滿足條件的四元組。

注意:四元組(a、b、c、d)中的元素必須按非降序排列。(即a≤b≤c≤d)

解集中不能包含重複的四元組。

例如:給出的陣列 s = , 目標值 = 0.↵↵ 給出的解集應該是:↵ (-1, 0, 0, 1)↵ (-2, -1, 1, 2)↵ (-2, 0, 0, 2)

和前邊刷到的3sum closed類似題目,不知道的可以看上篇。都是通過指標移動的方法來降低迴圈的層數,然後對要求的元素進行組合。

需要通過四指針對所有進行組合,兩個指標移動控制外層迴圈,begin,end進行收縮,通過此方法獲取所有元素的組合。

對所獲取的元素進行去重,如果在結果中進行去重,需要進行雙層遍歷list不太現實(此時想到通過對list的tostring方法獲取字串進行去重,當然也是一件很麻煩的事),最好的辦法就是列舉出所有重複的場景迴圈的時候進行去重。

public

static arraylist

>

foursum

(int

num,

int target)

//向右移動,注意此時沒有j++

for(

int j=i+

1;j)//第三次去重,將end重複去掉

while

(begin < end && num[end +1]

== num[end])}

}//這裡就是體現我無知的地方了,

//提出疑問為什麼不在for中進行j++?另一篇部落格解釋,看底部連線

j++;//第四次去重,將重複的j值去掉

while

(j < num.length -

2&& num[j]

== num[j -1]

)}}return lists;

}

此題目的關鍵就是去重,去除重複的 i,去除重複的 j,去除重複的 begin,end

區別i++在迴圈體中和i++在迴圈條件中的作用

leetcode刷題 劍指offer 24題

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數在陣列的前半部分,所有偶數在陣列的後半部分。示例 輸入 nums 1,2,3,4 輸出 1,3,2,4 注 3,1,2,4 也是正確的答案之一。新手上路,才學疏淺,望斧正 class solution int m 0,n len 1...

劍指offer刷題

面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...

劍指offer刷題

原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...