提示

LintCode中的相关算法题实现代码,可以在我的GithHub中下载。

题目需求

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

注意:答案中不可以包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:
[[-1, 0, 1],[-1, -1, 2]
]

解题思路

一开始想的非常简单,三个遍历,满足条件的放入一个List,然后再将这个List与已有的满足条件的List进行比较,看看有没有元素相同的,有的话不加入。

显然这样会超时, 因为三个循环太费时,时间复杂度,再加上比较当前满足条件的集合,更加费时。

我们可以先将原数组从小到大排序,固定其中两个元素 i 和 j,i从前往后走,j从后往前走,i 每往后一个,将 j 重置为数组末尾的下标,在 i 和 j 之间找使nums[i] + nums[j] + nums[k] == 0成立的k。

那么如何去重呢?

每次得出nums[i] + nums[j] + nums[k] == 0成立的i、j、k之后,令 i 往后走,直到nums[i] != nums[i + 1],并令 j 向前走,直到nums[j] != nums[j - 1]。这样就能保证得到的三个数字不会有重复。下面是代码

实现代码

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();Arrays.sort(nums);for (int i = 0; i < nums.length; i++) {if (nums[i] > 0) break;if (i > 0 && nums[i] == nums[i - 1]) continue;int j = nums.length - 1;int target = 0 - nums[i];int k = i + 1;while (k < j) {if (nums[k] + nums[j] == target) {List<Integer> item = Arrays.asList(nums[i], nums[k], nums[j]);result.add(item);while (k < j && nums[k] == nums[k + 1]) k++;while (k < j && nums[j] == nums[j - 1]) j--;k++;j--;} else if (nums[k] + nums[j] < target) {k++;} else {j--;}}}return result;}
}

LetCode 15 三数之和相关推荐

  1. Leetcode python《热题 HOT 100》15. 三数之和

    Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...

  2. 15. 三数之和 golang

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

  3. LeetCode 15. 三数之和(3Sum)

    15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...

  4. [双指针|模拟] leetcode 15 三数之和

    [双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...

  5. Suzy找到实习了吗Day 7 | 哈希表结束啦 454. 四数相加 II,383. 赎金信,15. 三数之和,18. 四数之和

    454. 四数相加 II(dict hash) 题目 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...

  6. 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

    代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...

  7. 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结

    LeetCode [454. 四数相加 II] 题目:给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...

  8. 15 三数之和(2021-07-09)

    15. 三数之和 链接:https://leetcode-cn.com/problems/3sum/ 题目描述见链接内容. 解法1:三重循环+HasH去重 想不到什么好的思路,于是就笨方法开干,用三种 ...

  9. 【LeetCode 算法】15.三数之和

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

最新文章

  1. (转)Vix_API 操作 VMware
  2. php ci hooks,CI框架 -- 核心文件 之 Hooks.php
  3. (转)upper_bound()与lower_bound()使用方法
  4. 11、InnoDB存储引擎
  5. MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解
  6. MySQL了content函数_MySql字符串函数使用技巧
  7. 2013年7月28日web前端学习笔记-------head相关标签应用
  8. IDEA 变量下面多了一根下划线
  9. 电商3.0:构建互利共赢的生态圈
  10. Windws Server 2012 Server Backup(备份与还原)
  11. 机器学习(一) Eviews下载及安装教程
  12. android 设置路由器,安卓手机如何设置无线路由器 实现WiFi上网
  13. 6 个常用的 API 接口在线管理平台
  14. Halcon轮廓提取
  15. Scratch基础教学之孙悟空的吹毛变猴
  16. mysql 根据经纬度查询距离
  17. dayjs获取当月的下月的第一天时间
  18. win7系统 无法安装.Net 4.7版本解决方案
  19. 计算广告第一章——在线广告综述
  20. 巧克力html模版,PH配方【巧克力夏洛特chocolate Charlotte】

热门文章

  1. 从FCN到DeepLab
  2. python 安装模块步骤
  3. Mac下Git与Github的简单使用
  4. CSMA/CD协议——学习笔记
  5. Cocos2d中使用颜色混合:加算,减算
  6. 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
  7. 关于类模板怎么用的简单介绍
  8. Matlab绘图详细总结
  9. python2 urllib2,Python urllib2保持活着
  10. python中字符串有什么组成_python字符串操作