首页 > 其他分享 >LeetCode刷题-两数之和

LeetCode刷题-两数之和

时间:2024-08-06 13:55:41浏览次数:18  
标签:target nums int length hashMap new LeetCode 两数 刷题

一、两数之和

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 2 <= nums.length <= 10^4

  • -10^9 <= nums[i] <= 10^9

  • -10^9 <= target <= 10^9

  • 只会存在一个有效答案

思路一:首先想到的是暴力求解(直接双重遍历查找符合条件的数组下标),O(N^2),O(1)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int length = nums.length;
        for(int i = 0; i < length; i++){
            for(int j = i + 1; j < length; j++){
                if(nums[i] + nums[j] == target){
                    return new int[]{i,j};
                }
            }
        }
        return new int[]{1};
    }
}

思路二:时间复杂度太高了,能不能用空间换时间,两者平衡一下呢?使用Hash结构存储遍历过的值,一次遍历找出答案。将target - nums[i] 作为key,若没有找到就将nums[i]存入hashmap中,找到就将结果进行返回。

Class Solution{
    public int[] twoSum(int[] nums, int target){
        // 一次遍历解决问题: {1,3,5} 6
        int length = nums.length;
        Map hashMap = new HashMap<Integer,Integer>();
        for(int i = 0; i < length; i++){
            // 在哈希表中查找能够匹配的值
            if(hashMap.containsKey(target - nums[i])){
                return new int[]{Integer.parseInt(hashMap.get(target - nums[i]).toString()),i};
            }
            // 将当前遍历到的数字存入哈希表
            hashMap.put(nums[i],i);
        }
        return new int[]{2};
    }
}
// 也可以像下面这样
​
​
        for(int i = 0; i < length; i++){
            // 在哈希表中查找能够匹配的值
            if(hashMap.containsKey(nums[i])){
                return new int[]{hashMap.get(target - nums[i]),i};
            }
            // 将当前所需要的数字存入哈希表
            hashMap.put(target - nums[i]),i);
        }

标签:target,nums,int,length,hashMap,new,LeetCode,两数,刷题
From: https://blog.csdn.net/m0_46224501/article/details/140953037

相关文章

  • 【网络安全】NISP一级二级备考指南,收藏复习不迷路!(附官方课程+刷题)_nisp二级需要准备多
    作为一名网安人,不考证怎么行呢?今天为大家整理了一份NISP备考指南,教大家如何在最短的时间拿证。收藏加关注,备考不迷路哦!那么,进入正题!NISP属于CISP的校园版,对拿学分、评奖评优、进入事业单位和安全企业都有好处。属于你不一定会用到,但必须有的证书。NISP一级考试共50......
  • LeetCode-两数之和
    前言这道题是Leetcode的第一题,也是经典题目之一,几乎所有刷题网站的第一题都是“两数之和”,只是Leetcode这道题不一样。在这篇博客中,我们介绍了两种解法:暴力算法哈希表算法\(\mathcal{O}(n^2)\)\(\mathcal{O}(n)\)题目描述给定一个整数数组nums和一个整数目标......
  • leetcode数论(2453. 摧毁一系列目标)
    前言经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。数论包含最大公约数(>=2个数)、最大公约数性质、最小公倍数、区间范围质因素计数(最下间隔)、质因素分解、判断质数、平方根、立方根、互质、同余等等。描述给你一个下标从 0......
  • leetcode数论(326. 3 的幂)
    前言经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。数论包含最大公约数(>=2个数)、最大公约数性质、最小公倍数、区间范围质因素计数(最下间隔)、质因素分解、判断质数、平方根、立方根、互质、同余等等。描述给定一个整数,写一个......
  • leetcode力扣第29题:两数相除
    这题看似简单,实则一点也不难(不是),实则还是比较困难。最简单的做法是直接用减法,不停循环计数,最后统计减多少次能成。如果被除数是2^31-1或差不多大小的数,而除数是1差不多大小的数,那循环减法要执行的次数太多,一定会超时。所以一定要有更好的思路(1)通过二分法查找可能的商(2)对于......
  • LeetCode 1631. Path With Minimum Effort
    原题链接在这里:https://leetcode.com/problems/path-with-minimum-effort/description/题目:Youareahikerpreparingforanupcominghike.Youaregiven heights,a2Darrayofsize rowsxcolumns,where heights[row][col] representstheheightofcell (row,c......
  • 高效刷题不再是梦
    不知道大家有没有遇到我去年刷题时遇到的难题困惑:手头资料某一专题的题目明明已经刷完了,却还是感觉自己这一专题知识点不够牢固仍需强化,买太多资料的话又担心贪多嚼不烂,去网上找题的话不仅费时费力,最后题目质量可能还不太行,导致刷题效率低下。如果你跟去年的我有一样的困扰的话......
  • day32【LeetCode力扣】541. 反转字符串 II
    day32【LeetCode力扣】541.反转字符串II1.题目描述给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符......
  • LeetCode面试150——13罗马数字转整数
    题目难度:简单默认优化目标:最小化平均时间复杂度。Python默认为Python3。目录1题目描述2题目解析3算法原理及代码实现3.1模拟法参考文献1题目描述罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符    数值I      1V    ......
  • 【Python】Python中的输入与输出——内附Leetcode【151.反转字符串中的单词】的C语言
    输入与输出导读一、Python中的输出1.1基本用法1.2格式化输出1.3通过`:`格式化值的输出1.4其它格式化输出二、Python中的输入2.1基本用法2.2`split()`方法2.3split()习题演练结语导读大家好,很高兴又和大家见面啦!!!在上一篇内容中我们介绍了Python中的数据类......