【leetcode】1. 两数之和(two-sum)(模拟)[简单]

    科技2022-07-10  122

    链接

    https://leetcode-cn.com/problems/two-sum/

    耗时

    解题:8 min 题解:5 min

    题意

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

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

    思路

    用 hash 表存一下 nums 中存在的整数和它的位置,最后顺序遍历 nums 数组,查询 target-nums[i] 是否存在并且不在当前位置,如果是则找到答案。

    时间复杂度: O ( n ) O(n) O(n)

    AC代码

    class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> unmp; int n = nums.size(); for(int i = 0; i < n; ++i) { unmp[nums[i]] = i; } vector<int> ans; for(int i = 0; i < n; ++i) { if(unmp[target-nums[i]] && unmp[target-nums[i]] != i) { ans.push_back(i); ans.push_back(unmp[target-nums[i]]); break; } } return ans; } };
    Processed: 0.040, SQL: 8