1. 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

15.三数之和

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

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

示例:

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:

[

[-1, 0, 1],

[-1, -1, 2]

]

solution1 暴力破解

//两次循环解两数之和
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] re = new int[2];
for (int i = 0; i < nums.length - 1; i ++) {
for (int j = i + 1; j < nums.length; j ++){
if (nums[i] + nums[j] == target) {
re[0] = i;
re[1] = j;
break;
}
}
}
return re;
}
}
//三次循环解三数之和,超出时间限制
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
if (nums == null || nums.length <= 2) {
return Collections.emptyList();
}
// Set集合,去除重复的数组
Set<List<Integer>> re = new LinkedHashSet<>();
for (int t = 0; t < nums.length - 2; t ++) {
for (int i = t + 1; i < nums.length - 1; i ++){
for (int j = i + 1; j < nums.length; j ++) {
if (nums[t] + nums[i] + nums[j] == 0) {
List<Integer> value = Arrays.asList(nums[t],nums[i],nums[j]);
Collections.sort(value);
re.add(value);
}
}
}
}
return new ArrayList<>(re);
}
}

solution2 两指针

//时间复杂度n^2
//先排序然后遍历数组,整两指针向中夹逼
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
if (nums == null || nums.length <= 2) {
return Collections.emptyList();
}
Arrays.sort(nums);
List<List<Integer>> res = new LinkedList<>();
for (int k = 0; k < nums.length - 2; k ++) {
if (nums[k] > 0) return res;
if (k > 0 && nums[k] == nums[k-1]) continue;
if(k == 0 || k >= 0 && nums[k] != nums[k - 1]) {
for (int i = k + 1,j = nums.length - 1; i < j;){
int sum = nums[i] + nums[j];
int min = 0 - nums[k];
if (sum == min) {
res.add(Arrays.asList(nums[i],nums[j],nums[k]));
while(i < j && nums[i] == nums[i+1]) i ++;
while(i < j && nums[j] == nums[j-1]) j --;
i ++;
j --;
}
else if (sum < min) {
i ++;
}else j --;
}
}
}
return res;
}
}

哈希表法

//时间复杂度为O(2n)
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0;i < nums.length;i++){
map.put(nums[i],i);
}
for (int i = 0;i < nums.length; i ++) {
int diff = target - nums[i];
if (map.containsKey(diff) && map.get(diff) != i){
return new int[]{i,map.get(diff)};
}
}
return null;
}
}
//一次哈希,时间复杂度为o(n)
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>(); for (int i = 0;i < nums.length; i ++) {
int diff = target - nums[i];
if (map.containsKey(diff)) {//遍历之前的map里是否包含差
return new int[]{i,map.get(diff)};
}
map.put(nums[i],i);
}
return null;
}
}
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
if (nums == null || nums.length < 3) return Collections.emptyList();
List<List<Integer>> res = new ArrayList();
Set<Integer> set = new HashSet();
Arrays.sort(nums);
for (int i = 0;i<nums.length;i++){
for (int j = i+1;j < nums.length;j ++) {
int diff = 0-nums[i]-nums[j];
if (set.contains(diff)) {
List<Integer> newAdded = Arrays.asList(diff, nums[j], nums[i]);
if (!res.contains(newAdded)) {
res.add(newAdded);
}
} }
set.add(nums[i]);
}
return res;
}
}
//两遍遍历加hash
//list 可以用contains()查看是否重复

LeetCode1两数之和、15三数之和的更多相关文章

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

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

  2. LeetCode:两数之和、三数之和、四数之和

    LeetCode:两数之和.三数之和.四数之和 多数之和问题,利用哈希集合减少时间复杂度以及多指针收缩窗口的巧妙解法 No.1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在 ...

  3. 代码随想录第七天| 454.四数相加II、383. 赎金信 、15. 三数之和 、18. 四数之和

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

  4. 代码随想录算法训练营day07 | leetcode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

    LeetCode 454.四数相加II 分析1.0 这个最直接暴力法,不过过于暴力了,害怕.jpg 失误 读题理解失误:题目要求的是四元组的个数,读完题到我这里成了输出四元组,悲哉 分析2.0 记录有 ...

  5. Java实现 LeetCode 15 三数之和

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

  6. 【Leetcode】两数之和,三数之和,四数之和

    两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...

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

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

  8. LeetCode——15. 三数之和

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

  9. 【LeetCode】15.三数之和

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

  10. leetcode题目15.三数之和(中等)

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

随机推荐

  1. 多源异构数据信息的融合方式0 - Dempster/Shafer 证据理论(D-S证据理论)

    Dempster/Shafer 证据理论(D-S证据理论)的大体内容如下: 一.简介: 在理论中,由互不相容的基本命题组成的完备集合Θ称为识别框架,表示对于某一问题的所有可能答案,但是只有一个答案是正 ...

  2. Amazon MSK 可靠性最佳实践

    1. Amazon MSK介绍 Kafka作为老牌的开源分布式事件流平台,已经广泛用于如数据集成,流处理,数据管道等各种应用中. 亚马逊云科技也于2019年2月推出了Apache Kafka的云托管版 ...

  3. 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法

    全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段.身为数据驱动型企业,2018年以来,丝芙兰就率先在行业内采用虹科提供的Domo商业智能进行数据分析和决策,并首先享受了运营优化.效 ...

  4. 高精度加法(C语言实现)

    高精度加法(C语言实现) 介绍 众所周知,整数在C和C++中以int ,long,long long三种不同大小的数据存储,数据大小最大可达2^64,但是在实际使用中,我们仍不可避免的会遇到爆long ...

  5. 🔥🔥想快速进入人工智能领域的Java程序员?你准备好了吗?

    引言 今天我们来探讨一下作为Java程序员,如何迅速融入人工智能的领域.,当前有一些流行的LLMs选择,例如ChatGPT.科大讯飞的星火.通义千问和文心一言等.如果你还没有尝试过这些工具,那么现在也 ...

  6. .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试

    2023年11月15日,对.net的开发圈是一个重大的日子,.net 8.0正式版发布. 圈内已经预热了有半个月有余,性能不断超越,开发体验越来越完美,早在.net 5.0的时候就各种吹风Aot编译, ...

  7. Excel 使用 VLOOKUP 函数匹配特定列

    前言 工作有一项内容,是根据新的表格的某一列的内容一对一匹配,生成一列新的表格.这就用到了 Excel 的 VLOOKUP 函数. 函数使用 函数体: =VLOOKUP(lookup_value,ta ...

  8. 给大家介绍一款强大的抓包代理工具--mitmproxy

    最近工作中涉及到和app相关的测试工作,需要用到mock,特意网上查了些资料,发现有很多工具可以实现app的mock,但是经过我反复试用后,发现mitmproxy这个工具非常的强大 我认为mitmpr ...

  9. Google Colab 现已支持直接使用 🤗 transformers 库

    Google Colab,全称 Colaboratory,是 Google Research 团队开发的一款产品.在 Colab 中,任何人都可以通过浏览器编写和执行任意 Python 代码.它尤其适 ...

  10. 解决Spring Boot Mail无法发送HTML格式的邮件

    Spring Boot版本:2.6.2 查阅spring-boot-starter-mail源码的MimeMessageHelper.setText方法,发现有个Boolean类型参数控制是否是HTM ...