当前位置: 代码迷 >> 综合 >> leetcode_15:3Sum
  详细解决方案

leetcode_15:3Sum

热度:49   发布时间:2023-12-10 22:44:16.0

这个题目第一眼看到的话,整理一下思路貌似不难。其实关键在于要先将数组进行排序。这个过程我们需要三个“指针”,第一个指针记录当前正在计算的元素,其余两个指针则分别记录此指针后面剩余元素的头和尾。当三个数的总和小于0(sum)时,证明数太小,那么头指针向后移动;当三个数的总和大于0(sum)时,证明数太大,尾指针向前移动;直到头尾指针相交的时候如果还不等于,那么解中肯定不包括当前正在计算的元素,将计算指针向后移动。直接上代码:

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> array_result = new ArrayList<>();Arrays.sort(nums);   //从小到大排列for (int i = 0; i < nums.length; i++) {if ((i-1) >= 0 && nums[i] == nums[i-1]) {continue;}int temp = nums[i];int pre = i+1, tail = nums.length-1;		//头指针和尾指针while(tail>pre) {int result = temp + nums[pre] + nums[tail];		//正确的结果if (result == 0) {List<Integer> list = new ArrayList<>();list.add(temp);list.add(nums[pre]);list.add(nums[tail]);array_result.add(list);//防止有重复的解,且因为当前解的唯一性,所以不用移动尾指针while(pre < tail && nums[pre] == nums[pre+1])		++pre;++pre;} else if(result < 0) {++pre;} else if(result > 0) {--tail;}}}return array_result;}
}