leetcode15 3Sum 从数组中找到三个整数,它们的和为0
生活随笔
收集整理的這篇文章主要介紹了
leetcode15 3Sum 从数组中找到三个整数,它们的和为0
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目要求
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set must not contain duplicate triplets.For example, given array S = [-1, 0, 1, 2, -1, -4],A solution set is: [[-1, 0, 1],[-1, -1, 2] ]輸入一個整數數組,從中找到所有的三個整數組成一個數組,這三個整數的和為0。要求不包括重復的結果
思路一:無hashset or hashmap
這里使用了三個指針。
先對數組進行排序。確定左側固定的指針,然后移動右側兩個直至找到三個值和為0.如果當前三個指針的值小于0,則將中間的指針右移至下一個不同的值,如果小于0,則將最右側指針左移至下一個不重復的值。一旦右側和中間的指針重合,移動左側指針至下一個不重復的值,并且初始化中間和右側的指針
思路二:有hashmap/hashset
利用hashmap/hashset是為了避開重復的值,但是效率值明顯不如上一種方法高
public List<List<Integer>> threeSum(int[] num) {Arrays.sort(num);List<List<Integer>> list = new ArrayList<List<Integer>>();HashSet<List<Integer>> set = new HashSet<List<Integer>>();for(int i=0;i<num.length;i++){for(int j=i+1,k=num.length-1;j<k;){if(num[i]+num[j]+num[k]==0){List<Integer> l= new ArrayList<Integer>();l.add(num[i]);l.add(num[j]);l.add(num[k]);if(set.add(l))list.add(l);j++;k--;}else if(num[i]+num[j]+num[k]<0)j++;elsek--;}}return list; }
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注我的微信公眾號!將會不定期的發放福利哦~
總結
以上是生活随笔為你收集整理的leetcode15 3Sum 从数组中找到三个整数,它们的和为0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和我信如何取消流量套餐(汉典和字的基本解
- 下一篇: 明日之后月饼配方 月饼配方制作