首页 > 编程语言 >leetcode算法热题--两树之和

leetcode算法热题--两树之和

时间:2024-04-30 13:00:11浏览次数:25  
标签:target nums -- 复杂度 数组 int 哈希 leetcode 两树

题目

给定一个整数数组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]

提示:

2 <= nums.length <= 10^4
-10^9 <= nums[i] <= 10^9
-10^9 <= target <= 10^9
只会存在一个有效答案

解答

方法一:暴力求解法
思路和算法
我们很容易就能想到,对于nums数组中的每一个数x,我们遍历其后的每一个数,使其相加,判断是否和target
相等。

代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n = nums.size();
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                if (nums[i] + nums[j] == target) {
                    return {i, j};
                }
            }
        }
        return {};
    }
};

复杂度分析

时间复杂度:O(N^2)。N为数组元素的数量,在最坏情况下两个for循环需要全部匹配一遍。
空间复杂度:O(1)。只使用了有限个空间来记录数据。

方法二:哈希表
思路和算法
我们在方法一种使用了一个for循环来寻找对应target-x,使得其时间复杂度为O(N),如果我们有办法能够将寻找target-x的时间复杂度降低,那么整个方法的时间复杂度就会变为O(N),哈希表就可以实现这一要求。
我们可以创建一个哈希表hashtable,对于每一个x,我们先在哈希表中寻找target-x,如果没有相匹配的,我们就将x以及它的索引存入哈希表中,随着x的不断向后移,哈希表中的数据也会越来越多,最终就会找到一个target-x来匹配到x

代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hashtable;
        for(int i=0;i<nums.size();i++)
        {
            auto it = hashtable.find(target - nums[i]);
            if(it != hashtable.end())
            {
                return {i,it->second};
            }
            hashtable[nums[i]] = i;
        }
        return {};
    }
};
复杂度分析

时间复杂度:O(N)。N为数组nums元素数量,利用哈希表能将寻找target-x的时间复杂度变为O(1)。
空间复杂度:O(N)。在最坏情况下,哈希表需要存储N个数据。

标签:target,nums,--,复杂度,数组,int,哈希,leetcode,两树
From: https://www.cnblogs.com/oyoy/p/18167093

相关文章

  • 实验三
    点击查看代码#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);//函数声明voidprint_spaces(intn);//函数声明voidprint_blank_lines(intn);//函数声......
  • [989] How to Use the Apply Method in Pandas
    References:Tutorial:HowtoUsetheApplyMethodinPandaspandas.Series.applypandas.DataFrame.apply1.pandas.Series.applyApplyafunctiontoeachelementofaSeries. importpandasaspd#CreateaSeriess=pd.Series([1,2,3,4,5])#Define......
  • fiddler 修改请求接口的返回结果
    修改返回结果Response结果有两种方式,一种把结果写在文件中,一种直接修改接口返回的结果第一种:把response结果放在txt文件中让其访问txt的内容response.txt文件中内容如下:{"code":0,"msg":"查询成功!","count":0,"data":[]}操作步骤:1、点击需要修改response的url2、......
  • 【LeetCode 1648】销售价值减少的颜色球
    题目描述原题链接:LeetCode.1648销售价值减少的颜色球解题思路题意很容易理解,就是每次挑剩余同色球数量最大的颜色卖得到最大价值,总共卖orders个球的最大总价值;最快速直观暴力的解法是按照同色球数量排序,每次取数量最大值累加到总价值中并且将数量减一后重新排序,重复or......
  • 高精度1588PTP时钟交换机,让工业通信领域全面革新
    高精度1588PTP时钟交换机,让工业通信领域全面革新 高精度1588PTP时钟交换机,让工业通信领域全面革新 京准电子科技官微——ahjzsz前言随着计算机和互联网技术的发展,以太网通信技术以其通信速率高、兼容性好、互联和可扩展性好等优点,在电力系统、交通、自动驾驶和自动化控制等......
  • 数论学习笔记 (3):因数与倍数
    \(\texttt{godmoo}\text{}\texttt{の}\text{}\texttt{数论学习笔记之}\text{}\boxed{因数与倍数}\)定义因数/约数,倍数:若\(d\midn\),则\(d\)是\(n\)的因数,\(n\)是\(d\)的倍数。公因数/公约数,公倍数:公共的因数/约数、倍数。最大公因(约)数:\(GreatestCommonDi......
  • 人机协同的半自动人形机器人 —— Covariant公司的RFM-1机器人
    Covariant公司的RFM-1机器人实现了一个极为有意思的功能,那就是在机器人执行任务的过程中如果遇到无法处理的情况下就会停止下来然后等待人类的语言指示,比如:夹具向上移动2cm,更换更大型号的夹具,等待,可以说该公司在目前人工智能算法还不能完全胜任任务的情况下引入了人类协助的方法,该......
  • 开源的快速开发平台:让企业实现降本增效!
    在快速发展的社会中,竞争越来越激烈,发展速度也越来越快。随着社会的进步和发展,数字化转型和流程化办公早已成为发展趋势和潮流。如何实现数字化转型?如何让企业获得降本增效的发展目标?流辰信息专业研发开源的快速开发平台产品,为客户提供集产品、框架定制、产品交付为一体的一站式技......
  • SeetaFace 6 使用方法
    SeetaFaceEngine是一个开源的人脸识别引擎,可以进行人脸检测、人脸关键点检测、人脸识别等操作。首先,你需要下载并编译SeetaFaceEngine,然后在你的项目中链接这个引擎。下面是一个简单的使用SeetaFaceEngine进行人脸检测的例子:#include<seeta/FaceDetector.h>#include<seet......
  • RCE
    php远程代码执行漏洞RCE又称远程代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。PHP代码执行函数:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、u......