【笔记】LeetCode之路 #1 两数之和

目录

前言

正文

题目描述

1. 两数之和

解法(解法来自力扣题解库)

后记


前言

        真的代码能力太弱了,得打打题磨练一下,就从力扣开始刷刷看吧!

        当笔记随心记一记。

正文

题目描述

1. 两数之和

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

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

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

示例 1:

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

解法(解法来自力扣题解库)

普通解法就是使用两层遍历嵌套,时间复杂度为 O(N^2);

使用哈希表以空间换时间可以缩短时间,时间复杂度为 O(N)。

也就是说,在遍历的同时,记下已经遍历过的数组元素的下标,并存在表中;后面遍历到的数值与前面表中记录的键值对匹配。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> hashTable;
        for(int i = 0; i < nums.size(); ++i){
            auto it = hashTable.find(target - nums[i]);    //如果没有找到,会返回 end
            if(it != hashTable.end()){
                return {it->second, i};
            }
            hashTable[nums[i]] = i;    //将遍历过的数值元素的下标存储起来
        }
        return{};
    }
};

后记

        共勉!

        第一题就卡了,原因各种编译不通过,自己的 C++ 语法还是有很大的问题。没事,继续加油!

        

posted @ 2022-10-21 19:53  Witheart  阅读(19)  评论(0)    收藏  举报  来源