码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 1. Two Sum

时间:2018-03-09 18:06:28      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:code   c++   对象   通过   value   问题   情况   post   map   

问题链接

Leetcode 1

题目解析

给定一数字数组及目标和,求数组中和为目标的两个数下标。

解题思路

暴力搜索肯定过不了,时间复杂度为 \(O(n^2)\),TLE教你做人。

本题利用map可以轻松过,怎么用呢?简单理解为map可以在两个对象之间建立联系,即(key, value)。

数组中的数字作为map的key,对应数组索引值作为value。由于问题求解为 \(x + y = target\),变个法子,\(x = target - y\)。遍历一遍数组,判断(target - nums[i])是否出现过,由于题目说明只有一种解法,所以一旦判断通过,即可返回答案。时间复杂度为 \(O(n)\)

小tip:注意这里一遍遍历时建立map数据,没有必要把所有数据加入map,也可以省去不少时间。

unordered_mapmap 并无太大区别,C++11中的新容器,一个无序一个有序罢了,在不同情况下各有优势。这里只需要判断存在,所以选择无序的unordered_map即可。

unordered_map::count - C++ Reference

unordered_map::find - C++ Reference

参考代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> m;
        for (int i = 0; i < nums.size(); ++i) {
            if (m.count(target - nums[i])) {
                return {m[target - nums[i]], i};
            }
            m[nums[i]] = i;
        }
        return {};
    }
};

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

Leetcode 1. Two Sum

标签:code   c++   对象   通过   value   问题   情况   post   map   

原文地址:https://www.cnblogs.com/AlvinZH/p/8534805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!