Leetcode 1. Two Sum

Posted AlvinZH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 1. Two Sum相关的知识,希望对你有一定的参考价值。

问题链接

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的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 1 Two Sum

[LeetCode] 1 Two Sum

LeetCode之371. Sum of Two Integers

leetcode 1.Two sum

Leetcode 1. Two Sum (Python)

LeetCode #1 - Two Sum