leetcode1. 两数之和、15. 三数之和、18. 四数之和

news/2025/10/23 22:08:16/文章来源:https://www.cnblogs.com/uacs2024/p/19161755

leetcode1. 两数之和、15. 三数之和、18. 四数之和

1. 两数之和

注意,这个要返回的是对应数字的下标。

微信截图_20251023214547

 

2022/09的C++代码

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int size=nums.size();unordered_map<int,int> mapmap;for(int i=0;i<size;i++){auto it=mapmap.find(target-nums[i]);if(it == mapmap.end()){mapmap[nums[i]]=i;//mapmap.insert(pair<int, int>(nums[i], i));//另一种添加方法
            }else{return {it->second,i};}}  return {};}
};

2025/10的Java代码

class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;int[] res = new int[2];HashMap<Integer,Integer> record = new HashMap<>();for(int i = 0;i < n;++i){if(record.containsKey(nums[i]) && nums[i] * 2 == target){res[0] = record.get(nums[i]);res[1] = i;return res;}int minus = target - nums[i];if(record.containsKey(minus) && i != record.get(minus)){//保证不是同一个元素用两次res[0] = i;res[1] = record.get(minus);return res;}record.put(nums[i],i);}return res;}
}

 

 

 

15. 三数之和

注意,这个返回的是具体数字,不能重复,比如[ -1 , 0 , 1 ] 和 [ -1 , 1 , 0 ]就是重复的。

微信截图_20251023215430

以下为无法通过的超时解,每次添加前都查找是否已存在太耗时间了。

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> res = new ArrayList<>();int n = nums.length;Arrays.sort(nums);for(int i = 0;i < n;++i){if(nums[i] > 0)  break;if(i != 0 && nums[i] == nums[i-1])  continue;HashMap<Integer,Integer> record = new HashMap<>();//记录本轮目标值为(0-nums[i])的哈希表int target1 = 0 - nums[i];for(int j = i + 1;j < n;++j){if(record.containsKey(nums[j]) && nums[j] * 2 == target1){List<Integer> thisRes = new ArrayList<>(Arrays.asList(nums[i],nums[j],nums[j]));if(!res.contains(thisRes))  res.add(thisRes);continue;}int target2 = target1 - nums[j];if(record.containsKey(target2) && j != record.get(target2)){List<Integer> thisRes = new ArrayList<>(Arrays.asList(nums[i],nums[record.get(target2)],nums[j]));//res.add(new ArrayList<>(Arrays.asList(nums[i],nums[record.get(target2)],nums[j])));if(!res.contains(thisRes))  res.add(thisRes);continue;}record.put(nums[j],j);}}return res;}
}

以上代码改成HashSet,最后再转为List返回就可以通过。保证添加到HashSet时ArrayList是有序的。

但还是太低效。用时417ms,击败5.01%,内存52.50MB,击败5.00%。

class Solution {public List<List<Integer>> threeSum(int[] nums) {HashSet<List<Integer>> resSet = new HashSet<>();int n = nums.length;Arrays.sort(nums);for(int i = 0;i < n;++i){if(nums[i] > 0)  break;if(i != 0 && nums[i] == nums[i-1])  continue;HashMap<Integer,Integer> record = new HashMap<>();//记录本轮目标值为(0-nums[i])的哈希表int target1 = 0 - nums[i];for(int j = i + 1;j < n;++j){if(record.containsKey(nums[j]) && nums[j] * 2 == target1){resSet.add(new ArrayList<>(Arrays.asList(nums[i],nums[j],nums[j])));continue;}int target2 = target1 - nums[j];if(record.containsKey(target2) && j != record.get(target2)){resSet.add(new ArrayList<>(Arrays.asList(nums[i],nums[record.get(target2)],nums[j])));continue;}record.put(nums[j],j);}}return new ArrayList<>(resSet);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十七天

今日核心任务是攻克数据结构中的二叉树,整个学习过程更像一场逻辑拆解与规律验证的实践,而非单纯的知识记忆。 从定义入手,明确二叉树“每个节点最多拥有两个子树”的核心规则,这一约束让它区别于普通树,也为后续…

vue3+elementPlus el-date-picker 自定义禁用状态hook 建立结束时间不能小于开始时间

vue3+elementPlus el-date-picker 自定义禁用状态hook 建立结束时间不能小于开始时间pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

66页实验题

import tensorflow as tf from tensorflow.keras.datasets import cifar10 1. 加载并预处理 CIFAR-10 数据集 (x_train, y_train), (x_test, y_test) = cifar10.load_data() 像素值归一化(0-255 → 0-1) x_train = x…

简单云计算算法--20251023

简单云计算算法--2025/10/23 No.1 LCR 158. 库存管理 II 仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。 示例 1: 输入:st…

处理空输入踩的坑

处理一个外部传入的用户输入的时候,一开始只想着处理null,用"?.let{}"的模式处理。结果发现结果异常。 打断点发现传入值不是空,而是"" 由此发现kotlin处理空string的两个函数: isEmpty() Th…

【做题记录】贪心--提高组

A. Monotone Subsequence 有点 Ad-hoc。 第 \(i\) 次查询,直接询问当前未被删去的所有点。如果回答 \(\ge n+1\),那么直接输出;否则将回答的这些点标一个级别 \(i\)。最后一次询问之后还剩下的标为 \(n+1\)。根据鸽…

latex输入公式

输入不换行公式:点击查看代码 \begin{equation}\label{eq:2}u_{exact} = \sin(x) - \frac{1}{4} \sin(4x) + \frac{1}{8} \sin(8x) - \frac{1}{16} \sin(16x) + \frac{1}{24} \sin(24x) - \frac{1}{48} \sin(48x) + …

【为美好CTF献上祝福】 New Star 2025 逆向笔记

Re Week1 Strange Base 乍一看是个正常的 base64 加密点进 base64 函数一看,发现 base64 的表被换了。

XXL-JOB(5)

XXL-JOB(5) 表结构分析 xxl_job_lock:任务调度锁表; xxl_job_group:执行器信息表,维护任务执行器信息; xxl_job_info:调度扩展信息表:用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行…

蛋白表达原理与关键要素解析

一、蛋白表达的基本原理 蛋白表达(Protein Expression) 是指细胞根据遗传信息合成蛋白质的过程。在自然状态下,DNA 上的基因通过 转录(Transcription) 产生信使 RNA(mRNA),随后经过 翻译(Translation) 在核糖…

顾雅南的声音美化课堂

下载地址 https://8ma.co/res/L7AZ255U ◀.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0px } .zsleft { floa…

Ramanujan Master Theorem

:::note[前置知识] 这篇文章需要用到复数以及一些变换。如果你不会复数,可以参考这篇文章。 如果你不会变换,可以参考这篇文章。::: 位移算符 我们定义:\(D\equiv \frac{\mathrm d}{\mathrm dx}\),考虑 \[e^D=\sum…

【周记】2025.10.13~2025.10.19

2025.10.13~2025.10.19 周记不是太好的一周,随便说说两句吧。 ① 这一周非常非常的累...... 我们是周二、周四晚上(还有周六一整天哈)会上信息学竞赛,搞得我疲惫不堪。我们先是学了矩阵乘法,然后又打了一场模拟赛…

C++案例 自定义数组

#include <string> #include <iostream> #include <algorithm> #include <initializer_list> using namespace std;template<class T> class myArray {// 类模板 友元 重载 外部类实现/…

20251023周四日记

20251023周四日记今天心情好多了,项目终于快完事了。 今日: 1.早上买个早点肉夹馍来组里吃,来时正好碰见师姐收签字。更新了财政系统,搜了个nb的VLM综述。和博、耀对接好明天找他们去。 2.中午不老饿的,呆到两点去…

10.23《程序员修炼之道 从小工到专家》第二章 注重实效的途径 - GENGAR

软件开发需遵循多类核心原则,以提升效率、降低风险并保障代码质量。 DRY 原则(Don’t Repeat Yourself)要求系统中每项信息有单一权威表示,可避免重复带来的维护难题。重复主要分四类:强加的重复可通过方法规避,…

玩转单片机之智能车小露——LED闪烁实战

用单片机点亮一颗LED非常简单,让一颗LED闪烁也很简单,比如写一段下面这样的程序: while(1){ // 无限循环LED1 = 0; // 点亮LEDdelay_ms(300); // 延时300msLED1 = 1; // 熄灭LEDdelay_ms(300); // 延…

ord() 函数

ord() 函数以一个字符(长度为 1 的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。 ord() 函数的语法: ord(c)…

2025.10.23总结 - A

今天上了数据结构还有体育,加油