leetcode1两数之和

    科技2022-07-10  96

    1. 两数之和

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

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

    class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> map; for(int i=0;i<=nums.size();i++){ if(map.count(target-nums[i])) return {i,map[target-nums[i]]}; map[nums[i]] = i; } return {}; } }; unordered_map 是c++ stl中hash表的实现,相比于map(内部红黑树)的O(logn)查询时间复杂度,仅需要O(1)的时间复杂度。

    为什么是O(1),可以参考博客1底层物理结构是数组形式,知道下标一次查询便可以知道存不存在value。

    记住以下函数的调用 map.count(key),返回个数map.find(key),返回迭代器

    具体解析可以参考博客2

    这个题目时间复杂度是O(n)*O(1),相比于暴力的O(n^2)快很多C++11新特性 - 使用大括号包围的值列表赋值
    Processed: 0.010, SQL: 8