LeetCode——(1)两数之和题解

LeetCode——(1)两数之和题解

github地址:github.com/king-wk/leetcode

第一题是比较容易的遍历比较题,只需要稍稍注意元素不要重复使用就可以啦。

题目描述

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍
来源:力扣(LeetCode)

示例

LeetCode——(1)两数之和题解_第1张图片

解题思路

遍历nums中的每一个数,目标值减去该数即得到差,再将差与该数之前的数进行比对,如果有符合情况,输出两个数的下标即可。

解题代码

class Solution {
     
public:
    vector<int> twoSum(vector<int>& nums, int target) {
     
        unordered_map<int,int>record;//记录数据和下标
        for(int i=0; i < nums.size(); i++) {
     
            int difference = target - nums[i];//做差
            if(record.find(difference) != record.end()){
     //如果target与该数的差能在该数之前的数中找到
                int result[]={
     record[difference], i};//记录符合条件的两数的下标
                return vector<int>(result, result+2);
            }
            record[nums[i]]=i;
        }
        return{
     };
    }
};

也可以不采用result数组记录下标,直接将下标插入要返回的vector

class Solution {
     
public:
    vector<int> twoSum(vector<int>& nums, int target) {
     
        unordered_map<int,int>record;
        vector<int>result;
        for(int i=0; i < nums.size(); i++) {
     
            int difference = target - nums[i];
            if(record.find(difference) != record.end()){
     
                result.push_back(record[difference]);//直接通过push_back函数插入即可
                result.push_back(i);
                return result;
            }
            record[nums[i]]=i;
        }
        return{
     };
    }
};

如果觉得文章对你有用,欢迎关注❤️、评论、点赞!
也可以follow我的GitHub账号,里面有更多惊喜哦,等着各位小主的star★呀

你可能感兴趣的:(LeetCode题解,leetcode,算法,c++)