LeetCode“数组类型”第1题——Two Sum

一、题目

LeetCode“数组类型”第1题——Two Sum_第1张图片

中文:

LeetCode“数组类型”第1题——Two Sum_第2张图片

二、代码

1、暴力法

暴力法很简单。遍历每个元素。

class Solution {
public:
    vector twoSum(vector& nums, int target) {
        int n=nums.size();
        vector result;
        for(int i=0;i

性能:

复杂度分析:

时间复杂度:O(n^2), 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n)的时间。因此时间复杂度为 O(n^2)。

空间复杂度:O(1)。 

2、哈希表

用一个哈希表存储每个数对应的下标。

class Solution {
public:
    vector twoSum(vector& nums, int target) {
        unordered_map mapping;
        vector result;
        for(int i=0;ii){
                result.push_back(i);
                result.push_back(mapping[gap]);
                break;
            }
        }
        return result;
    }
};

性能:

复杂度分析:

时间复杂度:O(n)。

空间复杂度:O(n)。  

三、知识点解析

1、map、hash_map、unordered_map的区别

http://www.cnblogs.com/ranjiewen/p/5328137.html

https://blog.csdn.net/zhc_24/article/details/78915968

2、mapping.find(gap)!=mapping.end()的解析

https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html

用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。

查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,

分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.

 

 

你可能感兴趣的:(LeetCode刷题)