LeetCode1 两数之和

2024-02-26 08:44
文章标签 两数 leetcode1

本文主要是介绍LeetCode1 两数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LeetCode1 两数之和

在本篇博客中,我们将探讨力扣(LeetCode)上一道经典的算法问题:两数之和(Two Sum)。这个问题要求在给定的整数数组中,找出两个数的和等于目标值,并返回它们的数组下标。

问题描述

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

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

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

解决方案思路

我的解决方案采用了哈希表来优化查找过程。下面是我的解决方案的主要步骤:

  1. 创建一个哈希表 unordered_map<int, int>,用于存储数组元素和其对应的索引。
  2. 遍历数组 nums,对于每个元素 nums[i]
    • 计算当前元素与目标值的差值 temp = target - nums[i]
    • 在哈希表中查找是否存在差值 temp 对应的键值对。
    • 如果存在,则返回当前元素的索引 i 和差值 temp 对应的值所表示的索引。
    • 如果不存在,则将当前元素及其索引插入到哈希表中。

代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {for(int i=0;i<nums.size();i++){temp=target-nums.at(i);auto it=M.find(temp);if(it!=M.end()){return {i,it->second};}else{M.insert(make_pair(nums.at(i),i));}}return {};}
private:unordered_map<int ,int > M={};int temp={};
};

总结

通过使用哈希表,我们可以在线性时间复杂度内解决这个问题。该解决方案的时间复杂度为 O(n),其中 n 是数组 nums 的长度。

哈希表的优势在于能够以接近常量时间的复杂度进行查找操作,从而提高了解决问题的效率。同时,该解决方案还考虑了算法的可读性和简洁性,使得代码易于理解和维护。

希望通过本文的讲解,博友们能够更深入地理解两数之和问题,并能够灵活运用哈希表等数据结构解决类似的算法问题。

这篇关于LeetCode1 两数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748291

相关文章

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

Leetcode面试经典150题-2.两数相加

解法都在代码里,不懂就留言或者私信 理论上提交这个就是最优解 字节考过不下20次,这个高居字节面试榜第9名 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) {

【LeetCode】01.两数之和

题目要求 做题链接:1.两数之和 解题思路 我们这道题是在nums数组中找到两个两个数使得他们的和为target,最简单的方法就是暴力枚举一遍即可,时间复杂度为O(N),空间复杂度为O(1)。 代码实现 class Solution {public:vector<int> twoSum(vector<int>& nums, int target) {//暴力枚举int n=nums

力扣第一题:两数之和

文章目录 需求分析代码结尾 需求 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[

【Hot100算法刷题集】哈希-01-两数之和(暴力枚举再优化,也不是哈希表的对手)

🏠关于专栏:专栏用于记录LeetCode中Hot100专题的所有题目 🎯每日努力一点点,技术变化看得见 题目转载 题目描述 🔒link->题目跳转链接 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那 两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任

欧几里德算法(求两数最大公因数)

两个整数的最大公因数(gcd)是同时整除两个大最大整数。即gcd(50,15)=5.      算法连续计算余数直到除数为0,最后的非0余数就是最大公因数。因此若M=1989,N=1590,则余数是399,393,6,3,0,从而gcd(1989,1590)=3,这是一个快速算法。 public static long gcd(long m,long n){ while(n !

LeetCode题集-1- 两数之和

这个题目是什么意思呢?简单来说就是在一个数组中找出两个元素,使其和为我们设定的值,并且每个元素只能用一次。 如下图具体示例: 到这里不知道你是否已经有解题思路了呢? 解法一:双层循环 我第一反应就是双层循环,直接暴力破解。因为题目要求每个元素只能使用一次,并且已经计算过的也没必要再次计算,因此内层循环索引起始可以以外层索引+1作为起始点,具体代码如下: public stati

力扣1.两数之和(哈希表)

class Solution {// 定义一个名为twoSum的方法,接收一个整数数组nums和一个整数target作为参数public int[] twoSum(int[] nums, int target) {// 创建一个HashMap,用于存储数组中的元素及其对应的索引Map<Integer, Integer> map = new HashMap<Integer, Integer>();/

力扣top300——2.两数相加

序号前300中非会员题 2. 两数相加 我们建立一个哨兵,方便返回使用,再建立一个指针cur,来一个个建立链表。 循环遍历链表,当两个链表没走到头或需要进位时继续下去。 当前结点的值为进位+两链表值%10,然后修改进位,将结果放入链表,将3个链表走到next /*** Definition for singly-linked list.* struct ListNode {* i

用python手刃Leetcode(1):两数之和【简单题】

前言 博客里新开一个“用python手刃Leetcode”的专题,顾名思义,主要目的是记录自己在Leetcode上刷题的过程,代码全程用python3编写,所用网址是:leetcode中国。这个网址的好处是:1)纯中文,解决了英语不好读题困难的问题;2)网页打开速度快。 ` 同时可以看到:目前官网给出的解题代码是用java编写的,并没有给出官方的python解答,本专栏除了尽量使用多种解法给出每