首页 > 其他分享 >两数之和

两数之和

时间:2024-12-16 09:46:47浏览次数:2  
标签:下标 target nums int preNums 两数

  1. 题目链接

  2. 注意事项

    • 1️⃣有且仅有一个正确答案。
    • 2️⃣每个数只能使用一次。
    • 3️⃣返回的是下标
  3. 解法一:两个for循环,找到了直接返回即可。

    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 {-1, -1};
        }
    };
    
    • 时间复杂度:O(n^2)
  4. 解法二:先排序,然后左指针指向第一个数,右指针指向最后一个数,如果两数之和大于target,则右指针往左动,如果两数之和小于target,则左指针往右动。

    • 不好意思,这方法不行,因为返回的是下标!排序后,下标混乱了。
  5. 解法三:从左往右便利,我们在便利到i下标,也就是nums[i]时,我们想知道,之前便利过的数有没有target - nums[i],如果有,那么就直接返回即可。所以,我们使用一个哈希表,存放已经便利过的数。

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            int n = nums.size();
            map<int, int> preNums;    // 数字-下标
            for (int i = 0; i < n; ++i) 
            {
                if (preNums.count(target - nums[i]) != 0) {    // 找到了
                    return {preNums[target - nums[i]], i};
                }
                // 没找到   保存信息,供后面的便利使用
                preNums[nums[i]] = i;
            }
            return {-1, -1};
        }
    };
    

标签:下标,target,nums,int,preNums,两数
From: https://www.cnblogs.com/ouyangxx/p/18609243

相关文章

  • LeetCode - Hot100 - 1.两数之和
    前言本专栏主要通过“LeetCode热题100”,来捡起自己本科阶段的算法知识与技巧。语言主要使用c++/java。题目描述1.两数之和题目链接:https://leetcode.cn/problems/two-sum/?envType=study-plan-v2&envId=top-100-liked给定一个整数数组nums和一个整数目标值target,......
  • 力扣2.两数相加
    链表两数相加的问题与数组里面大数相加的问题一样。思路:我们从头开始遍历两个链表,当两个链表都没有到头时,我们正常将该节点的值进行相加,并且建立新的节点来保存当前位的值,加入到前面结果的结尾,同时保存进位的值;若当前任意一个链表没有到达末尾,我们应该继续运算,在运算时把已经......
  • 2024/12/6 【哈希表】LeetCode1.两数之和 【√】
    解法1:暴力解法classSolution:deftwoSum(self,nums:List[int],target:int)->List[int]:foriinrange(len(nums)):des=target-nums[i]ifdesinnums:forjinrange(len(nums)):......
  • 华为编程-两数之和(暴力搜索vs哈希表)
    两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。解答一(暴力搜索):类似于排序算......
  • LeetCode2 两数相加
    LeetCode2两数相加题目链接:LeetCode2描述给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。示......
  • LeetCode题解:29.两数相除【Python题解超详细,位运算、二分查找法、递归法】,知识拓展:位
    题目描述        给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。返回被除数 dividend 除以除数 div......
  • 链表【两数相加】具体思路——【递归】【迭代】【暴力】(附完整代码)
    文章目录前言一、问题引入,如何理解【链表】两数相加?二、方法一(固定数组暴力)三、方法二(递归法)四、方法三(迭代法)前言本文将介绍【链表】两数相加对于这一问题将采用多种思路方法来解决【暴力】【递归法】【迭代法】一、问题引入,如何理解【链表】两数相加?题目链接......
  • 【JS】哈希法解决两数之和
    思路使用哈希法:需要快速查询一个元素是否出现过,或者一个元素是否在集合里时本题需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,符合要求的某元素是否遍历过,也就是是否出现在这个集合。因为要返回下标,所以使用Map集合,key存放元素值,value存放元素下......
  • 两数相除(c语言)
    1.//给你两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和取余运算。//整数除法应该向零截断,也就是截去(truncate)其小数部分。//例如,8.345将被截断为8,-2.7335将被截断至-2。//返回被除数dividend除以除数divisor得到的商。//注......
  • C++入门基础知识91(实例)——实例16【求两数最小公倍数】
    成长路上不孤单......