LeetCode:15. 3Sum(Medium)

时间:2022-03-14 03:11:28

1. 原题链接

https://leetcode.com/problems/3sum/description/

2. 题目要求

数组S = nums[n]包含n个整数,请问S中是否存在a,b,c三个整数,使得a+b+c=0。找出所有满足该条件的三元组,且不包含重复三元组。

3. 解题思路

首先对数组进行排序

思路一:三层for循环暴力解决,同时考虑过滤重复,时间复杂度为O(n3)

思路二:时间复杂度为O(n2),外面一层for循环,以每个元素 nums[i] 作为三元组重的一个元素,然后从剩余的元素中找出二者之和满足0-nums[i]的两个元素。通过一层while循环,从剩余所有元素的首位两个元素开始找,不断向中间逼近。

过滤重复:因为已经对数组进行排序,所以相同的整数一定会连在一起。当使用for循环进行遍历时,如果当前指向元素 nums[i] 与 nums[i-1]相同,则可跳出本次循环,执行 i++,从而达到过滤重复的目的。

4. 代码实现

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List; public class ThreeSum15 {
public static void main(String[] args) {
int[] nums = {-5, -2, -2, -2, -4, 4, 0, 5};
for (int i = 0; i < ThreeSum15.threeSum(nums).toArray().length; i++) {
System.out.println(ThreeSum15.threeSum(nums).get(i));
}
} public static List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> ls = new LinkedList<>(); for (int i = 0; i < nums.length - 2; i++) {
if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) { // 跳过可能重复的答案 int l = i + 1, r = nums.length - 1, sum = 0 - nums[i];
while (l < r) {
if (nums[l] + nums[r] == sum) {
ls.add(Arrays.asList(nums[i], nums[l], nums[r]));
while (l < r && nums[l] == nums[l + 1]) l++;
while (l < r && nums[r] == nums[r - 1]) r--;
l++;
r--;
} else if (nums[l] + nums[r] < sum) {
while (l < r && nums[l] == nums[l + 1]) l++; // 跳过重复值
l++;
} else {
while (l < r && nums[r] == nums[r - 1]) r--;
r--;
}
}
}
}
return ls;
}
}

  

LeetCode:15. 3Sum(Medium)的更多相关文章

  1. LeetCode:11&period; ContainerWithWater(Medium)

    原题链接:https://leetcode.com/problems/container-with-most-water/description/ 题目要求:给定n个非负整数a1,a2,...,an  ...

  2. LeetCode:18&period; 4Sum(Medium)

    1. 原题链接 https://leetcode.com/problems/4sum/description/ 2. 题目要求 给出整数数组S[n],在数组S中是否存在a,b,c,d四个整数,使得四个 ...

  3. LeetCode:46&period; Permutations(Medium)

    1. 原题链接 https://leetcode.com/problems/permutations/description/ 2. 题目要求 给定一个整型数组nums,数组中的数字互不相同,返回该数 ...

  4. LeetCode&colon; 60&period; Permutation Sequence(Medium)

    1. 原题链接 https://leetcode.com/problems/permutation-sequence/description/ 2. 题目要求 给出整数 n和 k ,k代表从1到n的整 ...

  5. LeetCode&colon; 61&period; Rotate List(Medium)

    1. 原题链接 https://leetcode.com/problems/rotate-list/description/ 2. 题目要求 给出一个链表的第一个结点head和正整数k,然后将从右侧开 ...

  6. LeetCode&colon; 62&period; Unique Paths(Medium)

    1. 原题链接 https://leetcode.com/problems/unique-paths/description/ 2. 题目要求 给定一个m*n的棋盘,从左上角的格子开始移动,每次只能向 ...

  7. LeetCode&colon; 56&period; Merge Intervals(Medium)

    1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...

  8. LeetCode&colon; 55&period; Jump Game(Medium)

    1. 原题链接 https://leetcode.com/problems/jump-game/description/ 2. 题目要求 给定一个整型数组,数组中没有负数.从第一个元素开始,每个元素的 ...

  9. LeetCode&colon; 54&period; Spiral Matrix(Medium)

    1. 原题链接 https://leetcode.com/problems/spiral-matrix/description/ 2. 题目要求 给定一个二维整型数组,返回其螺旋顺序列表,例如: 最后 ...

随机推荐

  1. Ubuntu14&period;04或16&period;04下安装JDK1&period;8&plus;Scala&plus;Hadoop2&period;7&period;3&plus;Spark2&period;0&period;2

    为了将Hadoop和Spark的安装简单化,今日写下此帖. 首先,要看手头有多少机器,要安装伪分布式的Hadoop+Spark还是完全分布式的,这里分别记录. 1. 伪分布式安装 伪分布式的Hadoo ...

  2. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  3. log4j&plus;logback&plus;slf4j&plus;commons-logging的关系与调试&lpar;转&rpar;

    log4j+logback+slf4j+commons-logging的关系与调试 从Log4j迁移到LogBack的理由 http://www.tuicool.com/articles/beeeYv ...

  4. mysql方言不支持blob类型解决方案

    package com.gstone.history.entity; import java.sql.Types; import org.hibernate.Hibernate; import org ...

  5. 写个批处理脚本来帮忙干活--遍历文件夹&amp&semi;字符串处理

    这次打算写几篇关于脚本方面的博客,主要是记录一下 Gradle 脚本和批处理脚本的一些写法,方便后续查阅. 前言 平常开发过程中,一些较为重复的手工性工作,如果能让脚本来帮忙处理,自然是最好的,刚好之 ...

  6. Educational Codeforces Round 52 &lpar;Rated for Div&period; 2&rpar;

    题目链接 A. Vasya and Chocolate 题意 已知钱,价格,赠送规则求最多获得巧克力数 思路常规算即可 代码 #include <bits/stdc++.h> #defin ...

  7. 使用 NPOI 导出 Excel 文件

    [NPOI简介] NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者 ...

  8. beego 实现API自动化文档

    安装beego和bee工具 1.beego安装 go get -u github.com/astaxie/beego 2.安装bee工具 go get -u github.com/beego/bee ...

  9. Python模块——logging模块

    logging模块简介 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.logging模块是Python的一个标准库模块, 由标准库模块提供日志记录API的关键好处是 ...

  10. KnockoutJs学习笔记

    1.缘由 新公司前端用的是Jquery+Knockout,Knockout只知道是MVVM,未曾接触.报到前,先学习下. 2.前置知识 MVVM模式介绍 MVVM:模型-视图-视图模型(Model-V ...