zoukankan      html  css  js  c++  java
  • [LeetCode] Two Sum

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

    Given an array of integers, find two numbers such that they add up to a specific target number.

    The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

    You may assume that each input would have exactly one solution.

    Input: numbers={2, 7, 11, 15}, target=9
    Output: index1=1, index2=2

    这题最先想到的肯定是暴力解法,时间复杂度为o(n2),代码如下:

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

    直接用暴力解法,在 leetcode 上提交会超时(试了下lintcode,暴力解法可以过掉所有测试用例),那有没有更快的方法呢?我最先想到的是利用哈希表,来记录数组元素值与其下标的映射关系,这样只需要对数组遍历一遍即可,时间复杂度为o(n),空间复杂度也是o(n)。在遍历的同时,完成哈希表的查询与插入。代码如下:

    class Solution {
    public:
        vector<int> twoSum(vector<int> &numbers, int target) {
            unordered_map<int, int> hash;
            for (int i = 0; i != numbers.size(); ++i)
            {
                unordered_map<int, int>::const_iterator itr = hash.find(target - numbers[i]);
                if (itr == hash.cend())
                {
                    hash.insert(make_pair(numbers[i], i));
                }
                else
                {
                    return vector<int>{itr->second + 1, i + 1};
                }
            }
            
        }
    };  
  • 相关阅读:
    NSSM 将jar 安装成windows服务
    Spark Streaming
    记录一次oracle的坑 ORA08103
    POJ 3669 Meteor Shower
    LeetCode题目1~3
    POJ 3723 Conscription 并查集 + Kruskal
    LeetCode题目4:Sort List
    C++实现的快速排序
    C++实现的一段希尔排序代码
    2014大众点评Hackathon参赛感想
  • 原文地址:https://www.cnblogs.com/jianxinzhou/p/4442249.html
Copyright © 2011-2022 走看看