/*
三数之和为0
执行用时 :55 ms, 在所有 Java 提交中击败了94.15%的用户
内存消耗 :46.9 MB, 在所有 Java 提交中击败了95.59%的用户
方法:双指针
:*/
public static List<List<Integer>> threeSum(int[] nums) {
List <List <Integer>>listList =new ArrayList<>() ;
if(nums.length ==0){
return listList ;
}
Arrays .sort(nums) ;
for(int i=0;i<nums .length ;i++) {
if (nums[i] > 0) break;//第一个大于0时,三者之和必定大于0
if (i > 0 && nums[i] == nums[i - 1]) continue;//排除重复三元组
int m = i + 1, n = nums.length - 1;//定义指针
while (m < n) {
if (n < nums.length - 1 && nums[n] == nums[n + 1] || nums[i] + nums[m] + nums[n] > 0) {//若和大于0,n--
n--;
} else if (m > i + 1 && nums[m] == nums[m - 1] || nums[i] + nums[m] + nums[n] < 0) {//若和小于0,m++;
m++;
} else {//加入链表
List<Integer> integerList = new ArrayList<>();
integerList.add(nums[m++]);
integerList.add(nums[n--]);
integerList.add(nums[i]);
listList.add(integerList);
}
}
}
return listList ;
}
}
三数之和为0
最新推荐文章于 2021-07-24 00:32:36 发布