leetcode(15)三数之和+去重
Posted erdanyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode(15)三数之和+去重相关的知识,希望对你有一定的参考价值。
三数之和
解题思路:排序+双指针
class Solution public List<List<Integer>> threeSum(int[] nums) List<List<Integer>> result = new ArrayList<List<Integer>>(); if(nums.length<=2) return result; List<Integer> item = null; Arrays.sort(nums); int len = nums.length; int zeroCount = 0; Map<Integer,Integer> map = new HashMap<>(); for(int i=0;i<len;i++) if(nums[i]==0) zeroCount++; map.put(nums[i],i); if(zeroCount>=3) item = new ArrayList<>(); item.add(0); item.add(0); item.add(0); result.add(item); int l=0; int r=0; int temp=0; Integer t = 0; for(int i=0;i<len-2;i++) if(nums[i+1]==nums[i]) continue; if(i>0&&nums[i-1]==nums[i]) temp = nums[i]*2; t = map.get(-temp); if(t!=null&&t>i) item = new ArrayList<>(); item.add(nums[i]); item.add(nums[i]); item.add(-temp); result.add(item); l=i+1; r=len-1; while(l<r) if(nums[i]<-nums[l]-nums[r]) while(l<r&&nums[l+1]==nums[l]) l++; l++; else if(nums[i]>-nums[l]-nums[r]) while(l<r&&nums[r-1]==nums[r]) r--; r--; else item = new ArrayList<>(); item.add(nums[i]); item.add(nums[l]); item.add(nums[r]); result.add(item); while(l<r&&nums[l+1]==nums[l]) l++; l++; while(l<r&&nums[r-1]==nums[r]) r--; r--; return result;
以上是关于leetcode(15)三数之和+去重的主要内容,如果未能解决你的问题,请参考以下文章