1.两数之和

news2024/11/18 16:30:26

传送门:https://leetcode.cn/problems/two-sum/

目录

题目描述 

题解 


题目描述 

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0,1] 。


示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]


示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]


 

题解 

哈希遍历

以输入nums=[2,7,11,15],target=9为例,本题要求返回数组中和为目标值的元素下标。故在创建的哈希表中以数组元素(nums[i])为key,以其下标(i)作为value

遍历输入用例nums=[2,7,11,15],并在哈希表中寻找是否含有key=target-nums[i]。若有则返回现在的数组下标i和key=target-nums[i]对应的value

上述方法先建表再遍历,需要两次循环且需考虑重复元素;如输入nums=[3,3],target=6,故不仅需要判断哈希表中是否含有key=target-nums[i],还需通过比较重复元素的下标来确保查到的元素不能为本身(hash[target-nums[i]]!=i)

下文中代码属于边建表边遍历,仅需一次循环且无需考虑重复元素。该方法的特点是每次向哈希表中添加一个元素时,均会判断哈希表中是否含有key=target-nums[i]且作用表中不含有key=target-nums[i]时,该元素才会被放入。这意味着当放入两个重复的元素时,前者因不满足条件而被放入哈希表,而后者因满足条件未被放入表中,即得出结果时表中没有两个重复的元素;故无需比较重复元素的下标来确认是重复元素中的哪一个

C++ 

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> hash;
        for(int i=0;i<nums.size();i++){
            if(hash.count(target-nums[i])){
                return {hash[target-nums[i]],i};
            }
            hash[nums[i]]=i;
        }
        return {};
    }
};

C#

public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        Dictionary<int,int> hash=new Dictionary<int,int>();
        for(int i=0;i<nums.Length;i++){
            if(hash.ContainsKey(target-nums[i])){
                return new int[]{hash[target-nums[i]],i};
            }
            hash[nums[i]]=i;
        }
        return new int[]{};
    }
}

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

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

相关文章

Android.bp学习

一. Android.bp概念 Android.bp 文件首先是 Android 系统的一种编译配置文件&#xff0c;是用来代替原来的 Android.mk文件的。在Android7.0 以前&#xff0c;Android 都是使用 make 来组织各模块的编译&#xff0c;对应的编译配置文件就是 Android.mk。 在 Android7.0 开始&…

【生信算法】利用HMM纠正测序错误(Viterbi算法的python实现)

利用HMM纠正测序错误&#xff08;Viterbi算法的python实现&#xff09; 问题背景 对两个纯系个体M和Z的二倍体后代进行约~0.05x的低覆盖度测序&#xff0c;以期获得后代个体的基因型&#xff0c;即后代中哪些片段分别来源于M和Z。已知&#xff1a; 后代中基因型为MM、MZ&…

C++ 内存管理

由于C++需要程序员自己完成堆区的内存回收,因此有可能存在内存泄漏的风险。而Java、Python不需要程序员去考虑内存泄漏的问题,虚拟机都做了内存管理。只要可以跨平台的编程语言都需要做内存对齐,C++、Java、Python都是一样的。内存的定义 程序运行时所需的内存空间分为 固定…

什么是知识,什么是知识图谱,有什么作用,有哪些应用领域?

知识图谱可以帮助机器理解世界&#xff0c;提高人工智能模型的性能。它还可以用于数据挖掘、信息检索、问答系统和语义搜索等领域&#xff0c;提高系统的准确性和可理解性。知识图谱的建模方式和技术也可以用于生物信息学和社交网络分析等领域。 知识图谱背景 在给出知识图谱…

【踩坑笔记】STM32 HAL库+泥人W5500模块

1.HAL库与标准库转换 泥人提供的模块收发程序 HAL库下的收发&#xff08;这里只提供部分接口&#xff0c;其它同样改发&#xff09;&#xff1a; 下边这条是标准库自带的函数&#xff0c;这里只用来和HAL库转换 改完之后&#xff0c;想验证自己的驱动改好没有&#xff0c;…

时序建模的主要流程

一、收集、预处理数据 收集&#xff1a;使用R包TSA的数据集&#xff0c;描述数据的基本统计特征【均值、方差、原始时序图】数据预处理&#xff1a;因为数据来源可靠&#xff0c;故针对数据预处理只做空缺值检查&#xff0c;其基本检测方法如下&#xff1a; 根据时间起点与时间…

nodejs+vue095设计学生选课成绩管理系统

目 录 目 录 III 1绪论 1 1.1课题研究的背景与意义 1 1.2 国内外研究现状和发展趋势 1 1.3课题研究的内容 2 2 关键技术介绍 3 前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn ins…

古典乐器网页设计成品 大学生音乐网站制作模板 大学生静态音乐HTML网页源码 dreamweaver网页作业 简单网页课程成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

单链表---对传参为双指针的理解

​​​​​​​​​​​ 上一篇中我们提到了单链表头指针的创建 如果链表为空时&#xff0c;头指针为NULL。接下来要实现节点的插入和删除。 在链表头部插入新节点&#xff0c;因此头指针指向的地址也应发生改变&#xff0c;即指向新节点的地址&#xff0c;因为在此时新节点就是…

消息队列之 Kafka + EFLFK集群部署

目录 介绍 Zookeeper 概述 Zookeeper 定义 Zookeeper 工作机制 Zookeeper 特点 Zookeeper 数据结构 Zookeeper 应用场景 Zookeeper 选举机制 部署 Zookeeper 集群 操作过程&#xff08;3台服务器操作相同&#xff09; 消息队列概述 为什么需要消息队列&#xff08;M…

C#语言实例源码系列-实现电脑显示器的各种设置

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

ARM S5PV210 汇编实现时钟设置代码详解

一、时钟设置的步骤分析 第1步&#xff1a;CLK_SRC寄存器的设置分析 先选择不使用 PLL。让外部 24MHz 原始时钟直接过去&#xff0c;绕过 APLL 那条路。 CLK_SRC 寄存器其实是用来设置 MUX 开关的。在这里先将该寄存器设置为全 0&#xff0c;主要是 bit0 和bit4 设置为 0&am…

安全智能分析技术白皮书 数据共享

数据共享 定义内涵 数据共享 是指在多个用户或多个程序之间遵循一定规则共同享用数据&#xff0c;并进行各种操作、运算和分析的一种技术。数据共享包括数据发布、接口、交换等内容。 技术背景 随着数字经济成为拉动全球经济增长的新引擎&#xff0c;大数据成为经济中重要的…

聊聊零拷贝?

什么是零拷贝 零拷贝是指计算机在执行IO操作的时候&#xff0c;CPU不需要将数据从一个存储区复制到另一个存储区&#xff0c;进而减少上下文切换以及CPU拷贝的时间&#xff0c;这是一种IO操作优化技术 零拷贝不是没有拷贝数据&#xff0c;而是减少用户态&#xff0c;内核态的…

【Python】sklearn中的K-Means聚类

文章目录初步认识初值选取小批初步认识 k-means翻译过来就是K均值聚类算法&#xff0c;其目的是将样本分割为k个簇&#xff0c;而这个k则是KMeans中最重要的参数&#xff1a;n_clusters&#xff0c;默认为8。 下面做一个最简单的聚类 import numpy as np import matplotlib.…

Python基础语法之学习print()函数

在AI时代&#xff0c;编程已不是程序猿、攻城狮的专属属性&#xff0c;而是一个工具&#xff0c;或是一种技巧&#xff0c;本质上跟Word、PPT没啥区别。如果大家现在想掌握一门编程技能的话&#xff0c;那一定是 Python, 因为它既简洁高效&#xff0c;又能快速入门上手。本文将…

JavaWeb语法三:线程不安全问题的原因和解决方案

目录 1.线程的状态 2.线程不安全的原因 2.1&#xff1a;原子性 2.2&#xff1a; 可见性 2.3&#xff1a;有序性 3.解决线程不安全问题 3.1&#xff1a;synchronized 3.1.1&#xff1a;互斥 3.1.2&#xff1a;可重入 3.2&#xff1a;volatile关键字 3.3&#xff1a;w…

傻白入门芯片设计,盘点GPU业界的大佬(十五)

在PC个人电脑时代&#xff0c;英特尔&#xff08;Inter&#xff09;是无可争议的芯片巨头&#xff0c;凭借着X86架构在数据中心CPU中的压倒性地位&#xff0c;一度垄断全球90%的市场份额。然而在人工智能时代&#xff0c;以英伟达&#xff08;NVIDIA&#xff09;为首的GPU、AI芯…

大学生心里健康

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们、联系信息文章信息、咨间师信息、服务信息、测试信息 管理员功能&#xff1a; 1、管理关…

[激光原理与应用-60]:激光器 - 光学 - 光的四大理论框架与其层次:几何光学、波动光学、电磁光学、电子光学

目录 第1章 光的四大理论框架与层次 第2章 光的四大理论各自的特点 2.1 几何光学&#xff08;粒子性&#xff09;》光学特征 2.2 波动光学&#xff08;波动性&#xff09; 2.3 电磁光学&#xff08;电学性&#xff09; 2.4 量子光学&#xff08;能量&#xff09; 第1章 光…