首页 > 其他分享 >LC 1、两数之和

LC 1、两数之和

时间:2023-07-28 13:57:03浏览次数:37  
标签:hash target nums int 复杂度 两数 LC

LC 1、两数之和

题目描述

这是LeetCode上的 1、两数之和,难度为 简单。

	给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出「和为目标值」的那「两个」整数,并返回它们的数组下标。
	你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
题目链接:https://leetcode.cn/problems/two-sum/

朴素解法

使用双重循环枚举下标 ij,分别代表我们要找的两个数,然后判断
$$
nums[i] + nums[j] == target
$$
另外为了防止得到重复的解,我们需要在下一层循环中从 i 开始

代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); i++){
            for(int j = i + 1; j < nums.size(); j++){
                if(nums[i] + nums[j] == target){
                    return {i, j};
                }
            }
        }
        return {};
    }
};
  • 时间复杂度:双重循环,复杂度是O(n^2)
  • 空间复杂度:O(1)

哈希表

首先,任何优化的思路都无外乎【减少重复】

我们可以发现,在存在着双重循环的情况下,我们其实是对数组存在着重复扫描的情况的。

举个栗子,对于 nums = [2, 3, 8 ,4] , target = 9 的情况,我们第一个扫描的值为2,我们就要从后扫描是否有7,这时我们到了3, 所以要找6, 我们就应该利用之前找7 的时候使用的结果来帮助我们找6,而不是在进行扫描。

所以,我们使用哈希表尽心那个值的存储 key:{数值} , value:{数值下标}

代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int t) {
        unordered_map<int, int> hash;
        for(int i = 0; i < nums.size(); i++){
            int key = t - nums[i];
            if(hash.find(key) == hash.end()) hash.emplace(nums[i], i);
            else return{hash[key], i};
        }
        return {};
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

其他

可以看到,我将原题目的入参 target 替换成了 t,但并不影响正确性,目的是为了提高编码速度。如果你也经常参与 LeetCode 周赛,就会发现这是一个常用的小技巧。 --(三叶姐)

标签:hash,target,nums,int,复杂度,两数,LC
From: https://www.cnblogs.com/superJade/p/17587382.html

相关文章

  • 医学案例|配对wilcoxon符号秩检验
    一、案例介绍某单位想要研究某保健品对小鼠是否具有抗疲劳作用,将同种属的小鼠按性别与年龄相同、体重相近配成对子,共14对,并将每对中的两只小鼠随机分配到两个不同的保健食品剂量组,测量小鼠负重5%体重时的游泳时间(min),试比较不同剂量组的小鼠负重游泳时间有无差别。二、问题分析想......
  • linux内存日志 | journalctl指令
    摘要一、linux内存日志就是有些日志仅仅在系统允许过程中写在内存当中,但是并不会保存到硬盘当中重启后,内存日志就会情况二、指令指令功能说明选项journalctl查看全部journalctl-n3查看最新3条journalctl--since19:00--until19:10:10查看起始......
  • 2023-07-27:最长可整合子数组的长度, 数组中的数字排序之后,相邻两数的差值是1, 这种数组
    2023-07-27:最长可整合子数组的长度,数组中的数字排序之后,相邻两数的差值是1,这种数组就叫可整合数组。给定一个数组,求最长可整合子数组的长度。答案2023-07-27:算法maxLen的过程如下:1.检查输入数组是否为空,如果为空,则返回0,表示最长可整合子数组长度为0。2.初始化长度为1的最长......
  • halcon01_halcon 联合C#导出
    01,halcon导出C#分为两种,一是导出C#语言,主要在action中进行封装二是,导出库工程,在导出库工程前,先保存halcon文件然后在导出库工程,将res_OUTTEST1文件夹拷贝在Debug文件夹下 ......
  • plsql develop 单步调试oralce存储过程
    单步调试是排查程序中逻辑错误的最直接的途径,sqlserver中调试非常方便,即F11即可进入调试模式。而oralce中的调试就需要进行一点点设置,这里记录一下plsqldevelop单步调试的方法:首先,要有调试权限否则报:调试报错,提示ORA-01031:insufficientprivileges,则说明当前用户权限不......
  • Profinet转EtherNet/IP网关连接AB PLC的应用案例
    西门子S7-1500PLC(profinet)与ABPLC以太网通讯(EtherNet/IP)。本文主要介绍捷米特JM-EIP-PN的Profinet转EtherNet/IP网关,连接西门子S7-1500PLC与ABPLC 通讯的配置过程,供大家参考。1, 新建工程:运行 RSLogix5000 程序,选择菜单 File->New,弹出对话框:  2, 在“Type”中选......
  • journalctl
    journalctl检索systemd日志,是CentOS7才有的工具。语法journalctl[OPTIONS...][MATCHES...]选项Flags:--system#显示系统日志--user#显示当前用户的用户日志-M--machine=CONTAINER#在本地容器上操作-S--since=DATE......
  • EtherNet/IP转 Modbus网关实现AB PLC控制变频器案例
    捷米特JM-EIP-RTU网关Modbus转ETHERNET/IP用于将多个变频器连接到Ethernet/Ip主网,以便森兰变频器可以由ABPLC控制。 配备专用于JM-EIP-RTU网关的EDS文件,ABPLC主站可以控制森兰逆变器从站。使用 AB 系统的配置方法1,运行 RSLogix5000 程序加载捷米特JM-EIP-RTU的EDS ......
  • 关于伺服刹车/急停/前后设备信号对接/PLC输入输出模块的公共端介绍
    一、伺服刹车关键词:急停,急停中间继电器、刹车中间继电器,刹车使能正文:通常情况不用硬件为主导而用程序来主导控制,多场景应用方便修改且安全可靠。伺服刹车硬件,一般是24v电源给进去,就会释放刹车使能。拿一个Z轴伺服作为对象。1.程序上控制逻辑如下急停按钮一般都是NC触点串联......
  • 2167 - 树的公共祖先(LCA)
    题目描述给定一棵树和两个不同的结点,求出他们最近的公共祖先父结点。已知该树有n个结点,标号1..n。输入第1行输入一个整数nn,代表结点数量(n≤100)第2行输入两个整数x,yx,y,表示需要计算的结点;以下n−1行,每行两个整数a和b,表示a的父结点是b。输出输......