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

1两数之和

时间:2025-01-09 22:10:49浏览次数:1  
标签:map target nums int map1 vector 两数

这道题也是经典的越写越复杂,最开始不能通过[3,3],6。然后就写判断map1[target-nums[i]]!=map1[nums[i]].还是不能通过,然后换成multimap,换完之后也不行。然后去查怎么获得相同key的value,然后知道了equal.range()。最后终于也是写出来了,但是花了好长时间。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        std::unordered_multimap<int, int> map1;
        vector<int> index1;

        for (int i = 0; i < nums.size(); i++) {
            map1.insert(std::make_pair(nums[i], i));
        }

        for (int i = 0; i < nums.size(); i++) {
            auto range1 = map1.equal_range(target - nums[i]);
            for (auto it = range1.first; it != range1.second; ++it) {
                if (it->second != i) { // 确保不是同一个元素
                    index1.push_back(i);
                    index1.push_back(it->second);
                    return index1;
                }
            }
        }
        return {};
    }
};

后面看代码随想录发现解决方法就很简单,只需要先检查是否有解,然后再添加当前处理的元素就行了。由于对输出答案的顺序没有要求,而前面错过的元素后面也是能找到的,因此能得到正确答案。下次还是要设定时间写

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        std::unordered_map <int,int> map;
        for(int i = 0; i < nums.size(); i++) {
            // 遍历当前元素,并在map中寻找是否有匹配的key
            auto iter = map.find(target - nums[i]); 
            if(iter != map.end()) {
                return {iter->second, i};
            }
            // 如果没找到匹配对,就把访问过的元素和下标加入到map中
            map.insert(pair<int, int>(nums[i], i)); 
        }
        return {};
    }
};

标签:map,target,nums,int,map1,vector,两数
From: https://www.cnblogs.com/gqzz/p/18662983

相关文章

  • 力扣1. 两数之和
    相信很多人和我一样(本人较......
  • LeetCode1.两数求和 C题解(简单)
    两数求和1.原题目题目示例2.思路解析3.具体操作1.原题目题目LeetCode题库的第1题题目为:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两......
  • LeetCode-两数之和(001)
    一.题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。二.示例 示例1:输入:nu......
  • 写一个方法将一个未排序的数组中找出任意两数之和等于给定的数
    在前端开发中,你可以使用JavaScript来编写这个方法。以下是一个简单的示例,展示如何在未排序的数组中找出任意两数之和等于给定数的所有组合:functionfindPairsWithSum(arr,targetSum){constpairs=[];constcomplementMap=newMap();for(leti=0;i<ar......
  • 两数相加
    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0 开头。示例1:输入:l1=[2,4,3],l2=[5,6,4]输......
  • 基础 (map,pair的使用详解)/题目 两数之和 讲解 哈希表的使用
    力扣题目链接(opensnewwindow)https://leetcode.cn/problems/two-sum/给定一个整数数组nums 和一个目标值target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给......
  • 两数相加——链表
    题目链接思路链表的方式,模拟加法的计算过程,用一个变量保存进位信息即可。代码classSolution{public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){//有一种办法可以节省空间,直接将结果放在l1或者l2上//但是这样就改变了原来的......
  • 两数之和
    题目链接注意事项1️⃣有且仅有一个正确答案。2️⃣每个数只能使用一次。3️⃣返回的是下标解法一:两个for循环,找到了直接返回即可。classSolution{public:vector<int>twoSum(vector<int>&nums,inttarget){intn=nums.size();for(inti......
  • 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.两数相加
    链表两数相加的问题与数组里面大数相加的问题一样。思路:我们从头开始遍历两个链表,当两个链表都没有到头时,我们正常将该节点的值进行相加,并且建立新的节点来保存当前位的值,加入到前面结果的结尾,同时保存进位的值;若当前任意一个链表没有到达末尾,我们应该继续运算,在运算时把已经......