【双指针+简化去重操作】Leetcode 15 三数之和

编程入门 行业动态 更新时间:2024-10-28 04:25:49

【双指针+简化去重操作】Leetcode 15 三数<a href=https://www.elefans.com/category/jswz/34/1768625.html style=之和"/>

【双指针+简化去重操作】Leetcode 15 三数之和

【双指针+简化操作】Leetcode 15 三数之和

    • 解法1

解法1

新建一个嵌套列表:List<List<Integer>> result = new List<>();
初始化一个ArrayList并直接赋值:ArrayList<Integer> result = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
向列表中添加元素:result.add()

操作流程

  1. nums[i] 从头到尾遍历数组,nums[left]是nums[i]的下一个元素,nums[right]最初指向数组的最后一个元素
  2. nums数组进行排序!!!
  3. 考察nums[i] + nums[left] + nums[right]的情况。如果和大于0,则right–,如果和小于0,则left++,等于0则添加结果

去重操作(不可以包含重复的三元组)

  • 如果nums[i] 大于0,就可以直接拜拜了 return result
  • 对i进行去重:如果 i>0 && nums[i] == nums[i-1] , continue
  • 对left进行去重:如果nums[left] == nums[left+1]。left++
  • 对right进行去重:如果nums[right] == nums[right - 1]。right–

时间复杂度O(N^2)
空间复杂度O(1)

class Solution {public List<List<Integer>> threeSum(int[] nums) {//双指针+去重操作List<List<Integer>> result = new ArrayList<>();//1【对数组进行排序】Arrays.sort(nums);// nums[i] 从头到尾遍历数组,nums[left]是nums[i]的下一个元素,nums[right]是最后一个元素for(int i = 0; i < nums.length; i++){// 如果nums[i]大于零,就可以直接拜拜if(nums[i] > 0) return result;int left = i+1;int right = nums.length-1;if(i > 0 && nums[i] == nums[i-1]) {continue; // 对i进行去重}// 考察nums[i] + nums[left] + nums[right]的情况while(left < right){if(nums[i] + nums[left] + nums[right] > 0){right--;} else if(nums[i] + nums[left] + nums[right] < 0){left++;}else{//将结果加入结果集result.add(Arrays.asList(nums[i], nums[left], nums[right]));while(left<right && nums[left] == nums[left+1]){left++;}while(left<right && nums[right] == nums[right-1]){right--;}left ++;right --;}       }}return result;}
}    

更多推荐

【双指针+简化去重操作】Leetcode 15 三数之和

本文发布于:2023-11-16 09:40:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1615929.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:之和   指针   操作   Leetcode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!