2. 三数之和(数组、hashset)
思路及算法:
该题与第一题的“两数之和”相似,三数之和为0,不就是两数之和为第三个数的相反数吗?因为不能重复,所以,首先进行了一遍排序;其次,在枚举的时候判断了本次的第三个数的值是否与上一次的相同;再次,在寻找hashset时,判断当前的num[ j ]是否重复;最后,在枚举完一个第三个数之后,清空hashset。本题的答题思想与第一题类似,难度在于不可重复。
代码:
1 Java:
2 class Solution {
3 public List<List<Integer>> threeSum(int [] nums) {
4 //从小到大排序
5 Arrays.sort(nums);
6 //设置剩下两个数字的目标值
7 int target = 0;
8 //建立返回的list
9 List<List<Integer>> result = new LinkedList<>();
10 //定义hashset
11 Set<Integer> hashset = new HashSet<>();
12 for(int i = 0;i < nums.length - 2 ; i++){
13 // 需要和上一次枚举的数不相同
14 if ( i > 0 && nums[ i ] == nums[ i - 1]) {
15 continue;
16 }
17 target = 0 - nums[i];
18 //pre为上一个符合条件的num[j],定义为Integer.MAX_VALUE是为了避免与输入冲突
19 int pre = Integer.MAX_VALUE;
20 for(int j = i + 1; j < nums.length ; j++){
21 //hashset中需要寻找的值
22 int other = target - nums[j];
23 if (hashset.contains(other)) {
24 //判断当前的num[j]是否重复
25 if(pre == nums[j]){
26 continue;
27 }
28 result.add(new LinkedList<>(Arrays.asList(nums[i], other , nums[j] )));
29 pre = nums[j];
30 }
31 //未找到对应的other值,就将当前nums[j]插入hashset
32 hashset.add(nums[j]);
33 }
34 //清空hash表
35 hashset.clear();
36 }
37 return result;
38 }
39 }
复杂度分析:
- 时间复杂度:,其中N是数组中的元素数量。排序时间复杂度是,然后hashset是。
- 空间复杂度:。hashset中最多需要存n-2个数。
提交结果:
2. 三数之和(数组、hashset)的更多相关文章
- Leetcode13. 罗马数字转整数Leetcode14. 最长公共前缀Leetcode15. 三数之和Leetcode16. 最接近的三数之和Leetcode17. 电话号码的字母组合
> 简洁易懂讲清原理,讲不清你来打我~ 输入字符串,输出对应整数 
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 思路:首先对数组进行排序 ...
- leetcode.数组.16最接近的三数之和-java
1. 具体题目 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案 ...
- Java实现 LeetCode 15 三数之和
15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...
- [LeetCode] 3Sum Closest 最近三数之和
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- [LeetCode] 3Sum 三数之和
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- lintcode: 三数之和II
题目 三数之和 II 给一个包含n个整数的数组S, 找到和与给定整数target最接近的三元组,返回这三个数的和. 样例 例如S = . 和最接近1的三元组是 -1 + 2 + 1 = 2. 注意 ...
随机推荐
- linux下生成动态库和链接动态库
1.生成动态库 src/test.h #ifndef _TEST_H_HH #define _TEST_H_HH void print(); #endif src/test.cpp #include ...
- python gunicorn详解
Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server.和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点. gunicorn 安装 ...
- 串口服务器和modbus网关有什么不同
串口服务器是什么? 串口服务器一般也会被称之为串口设备服务器,它是一种小型电子设备,可以将以太网IP/TCP数据包转换为RS232,RS485或RS422串口数据信号,反之亦然. Modbus网关是什 ...
- 8、Django之模型层第三篇:更多字段与参数
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- SpringBoot入门最简单的一个项目示例
使用IDEA创建一个SpringBoot项目 1.1 打开IDEA,文件-New-Project 1.2下一步,选择版本8(根据自己安装的JDK版本来选择) 1.3 下一步后点击Web,勾选Sprin ...
- windows本地破解用户口令
实验所属系列:操作系统安全 实验对象: 本科/专科信息安全专业 相关课程及专业:信息网络安全概论.计算机网络 实验时数(学分):2学时 实验类别:实践实验类 实验目的 1.了解Windows2000/ ...
- 在pgsql库用触发器自动触发PostgreSQL的存储过程,实现插入。
需求:在对表A 执行 insert操作时,筛选符合条件的数据 insert到表B中,编写为存储过程(postgreSQL数据库) [筛选条件]:1. dd !="A" 或是 dd为 ...
- 这么好?中科图新项目经理教你开发LocaSpace功能
LocaSpace是专注于实景三维数据应用的三维数字地球软件,为开发者提供强大.稳定的SDK服务,花费很少的精力即可在自己产品中集成某项功能. 我们将于2018年7月18日至7月20日举办&quo ...
- 用npm安装插件时报错: fsevents@^1.0.0 (node_modules\chokidar\node_modules\fsevents)
在做前端项目的时候执行命令: npm install --save-dev file-loader@1.1.6 --registry=https://registry.npm.taobao.org 出 ...
- Docker 运行 SQL Server 容器映像
随着.Net Core迭代,大家也都用上了Linux用上了Docker.跟.Net经常配套使用的SQL SERVER以前一直是windows only,但是从SQL Server 2017开始已经支持 ...