Leetcode 4Sum 日常刷題

2021-09-19 14:10:02 字數 834 閱讀 8768

#includeusing namespace std;

#include#includeclass solution

front++; //不管哪種情況都要移動指標!

}else if (sum_1 < sum_2) back--;

else front++;}}

old_num_2 = int_max; //每一次第乙個元素操作完以後,必須抹掉當前的old_num_2!

} return res;

}};

刷題總結:

用類似3sum的方法,先確定下第1個元素,再確定第2個元素,剩下兩個元素用「兩個指標」。前提是已排序。這個方法主要是怎麼去重,這是我用的方法。假設有序列 a{-2,-2,-2,-1,-1,0,0,1,1,2,2  }共11個元素,target=0。

第1個元素取a[0],第2個元素取a[1],那麼》1的所有兩個數的組合會被「兩個指標」所全部找到,而如果有重複的,都會是連續的重複,所以只要判斷與上乙個序列之中有乙個值不同,就可以進行插入。(「兩個指標」處的去重)

接下來第2個元素會取a[2],但是a[1]=a[2],還有必要再試嗎?不必要,看=target,這裡a和b已經將所有可能給試了,如果這此仍取a[2],那麼仍然在試集合中的a和b的值而已。這下如果重複了,就不一定會連續的重複了(可以自己列出),去重就麻煩了。所以第2個元素必須跳過已經掃過的值,也就是無論還有幾個-2,直接跳過到-1。(第2個元素處的去重)

第1個元素要取a[1]開始試嗎?不用!道理同第2個元素的去重一樣。所有以第1個元素為-2的序列已經都試出來了,再取-2也只是再找重複的序列,而且不是連續的。

參考部落格:

LeetCode日常刷題1 657 717 67

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解答class solution map.put ta...

LeetCode日常刷題504 682

給定乙個整數,將其轉化為7進製,並以字串形式輸出。示例 1 輸入 100輸出 202 示例 2 輸入 7輸出 10 注意 輸入範圍是 1e7,1e7 class solution 你現在是棒球比賽記錄員。給定乙個字串列表,每個字串可以是以下四種型別之一 1.整數 一輪的得分 直接表示您在本輪中獲得的...

日常 力扣刷題4

尋找兩個正序陣列中的中位數 給定兩個大小分別為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的 中位數 示例 1 輸入 nums1 1,3 nums2 2 輸出 2.00000 解釋 合併陣列 1,2,3 中位數 2 設計乙個時間複雜度為 o log ...