LeetCode Top 100 高頻算法題 15. 3Sum

2021-02-08 菜鳥名企夢
LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題。小編和實驗室同學之前面試找工作,也只刷了劍指offer和這top 100算法題,在實際面試中也遇到了很多LeetCode上的原題。劍指offer算法最優解之前和大家分享了,LeetCode Top 100這100道算法題,每道題小編都刷了很多遍,並且總結了一種最適合面試時手撕算法的最優解法。後續每天和大家分享一道LeetCode top 100高頻算法題,以及小編總結的最優解法。


LeetCode Top 100 高頻算法題系列的LeetCode算法題目就不幫大家翻譯了,程式設計師應該需要能看懂。LeetCode算法題有一個技巧:先看每道題的example部分情況看完example就能理解題目意思;如果看完example還有疑惑,可以再回過頭來看英文題目。這樣也可以節省一點時間~

Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Notice that the solution set must not contain duplicate triplets.

1th example

Input: nums = [-1,0,1,2,-1,-4]
Output: [[-1,-1,2],[-1,0,1]]

2th example

Input: nums = []
Output: []

3th example

Input: nums = [0]
Output: []

在LeetCode上本題屬於Medium難度。two Sum的升級版,不是很難,下面提供了2種解法,第一種解法的空間複雜度更低,下面是代碼和注釋,時間複雜度O(n *n)

class Solution {    public List<List<Integer>> threeSum(int[] nums){        List<List<Integer>> res = new ArrayList<List<Integer>>();                Arrays.sort(nums);                for(int i=0;i<nums.length-2;i++){//最後一組:length-3,length-2.length-1  nums[i]和i到length-1中搜索出和為-nums[i]的組合            if(nums[i]>0)                return res;                        int low = i + 1;            int high = nums.length-1;                        while(low<high){                int sum = nums[i]+nums[low]+nums[high];                                if(sum==0){                    List<Integer> l = new ArrayList<Integer>();                    l.add(nums[i]);                    l.add(nums[low]);                    l.add(nums[high]);                                        res.add(l);                                              //nums[i]可能會出現兩種 -5   1...2....3....4    -5+1+4  和-5+2+3                    while(low<high&&nums[low+1]==nums[low])                        low++;
low++; high--; }else if(sum>0) high--; else low++; } while(i<nums.length-2&&nums[i+1]==nums[i])                i++; }        return res;  } /*public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); HashMap<Integer,Integer> map = new HashMap<Integer,Integer>(); Arrays.sort(nums); for(int i=0;i<nums.length;i++) map.put(nums[i],i); for(int i=0;i<nums.length-1;i++){ if(nums[i]>0)//當最小的值都大於0時,後面就不可能出現和為0的組合了 return res; for(int j=i+1;j<nums.length;j++){ if(nums[i]+nums[j]>0)//當前面兩個數和大於0,j之後的元素值只會更大,不可能出現負數 break; if(map.containsKey(-(nums[i]+nums[j]))){ int index = map.get(-(nums[i]+nums[j])); if(index>j){//保證不重複 List temp = new ArrayList<Integer>(); temp.add(nums[i]); temp.add(nums[j]); temp.add(nums[index]); res.add(temp); while(j<nums.length-1 && nums[j+1]==nums[j])//避免重複 j++; } } } while(i<nums.length-1 && nums[i+1]==nums[i])//避免重複 i++; } return res;    }*/                 }


長按,掃碼,關注

及時收看更多精彩內容



點擊」閱讀原文「:領取5T精品資料面試總結100+實戰項目


我知道你 「在看

相關焦點

  • LeetCode Top 100 高頻算法題 53. Maximum Subarray
    由於公眾號做了改版,為了保證公眾號的文章可以準時推送到你手裡,大家記得點擊上方藍色」菜鳥名企夢「,將咱們的公眾號 加星標置頂 ,在此真誠的表示感謝~LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題。
  • LeetCode Top 100 高頻算法題42. Trapping Rain Water
    LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題。小編和實驗室同學之前面試找工作,也只刷了劍指offer和這top 100算法題,在實際面試中也遇到了很多LeetCode上的原題。
  • LeetCode Top 100 高頻算法題 23. Merge k Sorted Lists
    高頻算法題,即LeetCode上最高頻的100道求職面試算法題。小編和實驗室同學之前面試找工作,也只刷了劍指offer和這top 100算法題,在實際面試中也遇到了很多LeetCode上的原題。劍指offer算法最優解之前和大家分享了,LeetCode Top 100這100道算法題,每道題小編都刷了很多遍,並且總結了一種最適合面試時手撕算法的最優解法。後續每天和大家分享一道LeetCode top 100高頻算法題,以及小編總結的最優解法。
  • LeetCode Top 100 高頻算法題 03:Longest Substring
    LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題。
  • LeetCode Top 100 高頻算法題 49. Group Anagrams
    由於公眾號做了改版,為了保證公眾號的文章可以準時推送到你手裡,大家記得點擊上方藍色」菜鳥名企夢「,將咱們的公眾號 加星標置頂 ,在此真誠的表示感謝~LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題。
  • LeetCode Top 100 高頻算法題 02:Add Two Numbers
    ~LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題。小編和實驗室同學之前面試找工作,也只刷了劍指offer和這top 100算法題,在實際面試中也遇到了很多LeetCode上的原題。劍指offer算法最優解之前和大家分享了,LeetCode Top 100這100道算法題,每道題小編都刷了很多遍,並且總結了一種最適合面試時手撕算法的最優解法。後續每天和大家分享一道LeetCode top 100高頻算法題,以及小編總結的最優解法。
  • LeetCode Top 100 高頻算法題45. Jump Game II
    由於公眾號做了改版,為了保證公眾號的文章可以準時推送到你手裡,大家記得點擊上方藍色」菜鳥名企夢「,將咱們的公眾號 加星標置頂 ,在此真誠的表示感謝~LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題。
  • LeetCode Top 100 高頻算法題 05:Longest Palindromic Substring
    LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題
  • LeetCode Top 100 高頻算法題 21. Merge Two Sorted Lists
    LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題
  • LeetCode Top 100 高頻算法題 04:Median of Two Sorted Arrays
    LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題
  • LeetCode Top 100 高頻算法題 07:11. Container With Most Water
    LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題
  • LeetCode Top 100 高頻算法題 33. Search in Rotated Sorted Array
    高頻算法題,即LeetCode上最高頻的100道求職面試算法題。小編和實驗室同學之前面試找工作,也只刷了劍指offer和這top 100算法題,在實際面試中也遇到了很多LeetCode上的原題。劍指offer算法最優解之前和大家分享了,LeetCode Top 100這100道算法題,每道題小編都刷了很多遍,並且總結了一種最適合面試時手撕算法的最優解法。後續每天和大家分享一道LeetCode top 100高頻算法題,以及小編總結的最優解法。
  • LeetCode Top 100 高頻算法題 06: 10 Regular Expression Matching
    LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題
  • ​LeetCode刷題實戰70:爬樓梯
    算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試
  • 初級樹狀數組 leetcode 練習題
    赤裸裸的樹狀數組模板題,直接套用即可。代碼:https://github.com/tiankonguse/leetcode-solutions/blob/master/problemset-new/003/00307-range-sum-query-mutable/range-sum-query-mutable.cc三、計算右側小於當前元素的個數題意:給一個數組,求每個位置右側比自己小的元素個數
  • 14種模式搞定面試算法編程題(PART I)
    好了不廢話啦,今天文章的主題就是分享14種解決面試算法編程題的思路(來自educative[1]),經過本人之前筆試面試經驗證明確實確實非常非常高頻,一定要十分熟悉。例如給定一個數組 [1, 5, 3]將第一個數字(1)添加到所有現有子集,以創建新的子集: [[], [1]]繼續添加[[], [1], [5], [1, 5]][[], [1], [5], [1, 5], [3], [1, 3], [5, 3], [1, 5, 3]]
  • 回溯法|一文解決四道 Leetcode「組合總和」題
    示例:輸入:candidates = [2,7,6,3], target = 7,所求解集為:[  [7],  [2,2,3]]「leetcode組合總和」 和 「leetcode-40.39題和40題的代碼。
  • 14種模式搞定面試算法編程題(PART II)
    為了更方便大家的交流溝通,我們建立了算法面試討論組,感興趣的小夥伴可以訂閱後臺回復"面試"加入好了不廢話啦,今天文章的主題繼續分享上一篇未寫完的部分,14種模式搞定面試算法編程題(PART I)。經過本人之前筆試面試經驗證明確實確實非常非常高頻,一定要十分熟悉。
  • 【面試錦囊】14種模式搞定面試算法編程題(1-7)
    好了不廢話啦,今天文章的主題就是分享14種解決面試算法編程題的思路(來自educative[1]),經過本人之前筆試面試經驗證明確實確實非常非常高頻,一定要十分熟悉。例如給定一個數組 [1, 5, 3]將第一個數字(1)添加到所有現有子集,以創建新的子集: [[], [1]]繼續添加[[], [1], [5], [1, 5]][[], [1], [5], [1, 5], [3], [1, 3], [5, 3], [1, 5, 3]]
  • 網際網路公司最常見的面試算法題大集合!
    今天新智元給大家推薦的這個GitHub項目,是Repo主自己刷題的心路歷程,並給出了解題參考。該項目目前分為四個部分:第一個部分是 leetcode 經典題目的解析,包括思路,關鍵點和具體的代碼實現第二部分是對於數據結構與算法的總結第三部分是 anki 卡片, 將 leetcode 題目按照一定的方式記錄在 anki 中,方便大家記憶第四部分是計劃, 這裡會記錄將來要加入到以上三個部分內容只有熟練掌握基礎的數據結構與算法,才能對複雜問題迎刃有餘