要求:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

思路:数组遍历

  • 首先对数组进行排序,使用Arrays工具类sort方法即可,排序后固定一个数 nums[i],再使用左右指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nums[R],计算三个数的和 sum判断是否满足为0,满足则添加进结果集
  • 如果 nums[i]大于 0,则三数之和必然无法等于 0,结束循环
  • 如果 nums[i] == nums[i-1],则说明该数字重复,会导致结果重复,所以应该跳过
  • 当 sum == 0 时,nums[L] == nums[L+1] 则会导致结果重复,应该跳过,L++
  • 当 sum == 0 时,nums[R] == nums[R-1] 则会导致结果重复,应该跳过,R–
  • 时间复杂度:O(n^2),n为数组长度
public static List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ans = new ArrayList(); //集合,存储数组int len = nums.length;  //数组的长度if (nums == null || len < 3){ //数组为空或者长度小于3,则返回return ans;}Arrays.sort(nums);  //自动排序 从小到大for (int i = 0; i < len; i++) {if (nums[i] > 0) break; //当前循环数组中第一个数如果大于0,则证明所有数都大于0,直接结束循环if (i > 0 && nums[i] == nums[i-1]) continue;//去重,停止当前这轮的循环,避免让重复数组添加进入到ans中int left = i + 1;//左指针,右指针int right = len - 1; //下标while (left < right){int sum = nums[i] + nums[left] + nums[right]; //三数之和if (sum == 0){ans.add(Arrays.asList(nums[i],nums[left],nums[right])); //填入进集合ans中while (left < right && nums[left] == nums[left+1]) left++; //去重,左指针右移一位while (left < right && nums[right] == nums[right-1]) right--; //去重,右指针左移一位left ++;right --;}else if (sum > 0){ //三数和大于0,因为是按照从小到大排的数组,所以右指针指的数太大,所以左移right--;}else if (sum < 0){left++;}}}return ans;
}

LeetCode015:三数之和相关推荐

  1. Leetcode015. 三数之和

    一.问题描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[i] ...

  2. 伍六七带你学算法 进阶篇-三数之和

    三数之和 难度-中等 题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...

  3. LeetCode实战:最接近的三数之和

    题目英文 Given an array nums of n integers and an integer target, find three integers in nums such that ...

  4. LeetCode实战:三数之和

    题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

  5. 算法-----三数之和等于0

    三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件 且不重复的三元组. 注意:答案中不可以包含重 ...

  6. python【力扣LeetCode算法题库】16- 最接近的三数之和

    最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答 ...

  7. 算法:最接近的三数之和

    题目: 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 示例 ...

  8. 文巾解题 16. 最接近的三数之和

    1 题目描述 2 解题思路:排序+双指针 大体上思路和文巾解题 15. 三数之和_刘文巾的博客-CSDN博客是一样的 我们对整个数组进行升序排序.然后: 1)假设数组的长度为 n,我们先枚举 a,它在 ...

  9. python 三数之和

    三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组.注意:答案中不可以包含 ...

最新文章

  1. log4j显示hibernate sql参数的配置
  2. dataframe的重设index
  3. stm32逆向与安全科普,bin文件逆向反汇编
  4. Feign深入学习(二)
  5. jQuery上传插件-uploadify3.1使用说明
  6. CSS3-文本-text-shadow
  7. IntelliJ IDEA 远程deBug jar包
  8. 力扣——最长公共前缀
  9. 4.4使用@Enable*注释去切换配置
  10. 著名互联网公司薪酬最全分析!
  11. 大数据的关键技术(一)
  12. 12V铅酸电池充放电保护板
  13. 从零构建一个riscv64 ubuntu-20发行版系统
  14. 斑马条码打印机断电重启后无法打印问题
  15. Matlab 2014b在Ubuntu14.04安装
  16. 幼儿园体育游戏电子计算机教案,幼儿园中班体育游戏教案
  17. jquery.flexslider-min.js实现banner轮播图效果
  18. 北大光华本科女强人的超长综合面经
  19. uniapp项目中使用canvas生成海报并保存、微信分享、发送至朋友圈
  20. 一条咸鱼的java学习笔记第7天之Oracle数据库

热门文章

  1. 2014-05-13 13:35:42
  2. sql_mode详解(超详细,亲测有效)
  3. 企鲸客scrm 客户转化功能介绍
  4. Python爬虫学习---------根据分类爬取豆瓣电影的电影信息
  5. 史上最细,Charles抓包工具的基本配置、查找接口的方法、爬取中国大学Mooc整门课程
  6. 宝塔面板+青龙面板部署除JD外各种签到合集(云音乐、值得买、b站等等)
  7. Unity图片转换为法线贴图
  8. JS根据指定值删除数组中的元素
  9. PHP 关于数组的6个处理
  10. 无限火力跳跳机器人_LOL“无限R”套路火了,CD比无限火力短,机器人大招3秒,该怎么玩?...