• LeetCode1:两数之和


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

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

    示例:

    给定 nums = [2, 7, 11, 15], target = 9

    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]

    1.暴力解法,时间复杂度为O(n^2)

    2.哈希表,时间复杂度为O(n)。

    一遍哈希 

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int>& nums, int target) {
     4         unordered_map<int,int> m;
     5         for(int i=0;i<nums.size();i++){
     6             if(m.find(target-nums[i])!=m.end())
     7                 return {i,m[target-nums[i]]};
     8             m.insert({{nums[i],i}});
     9             //m.insert(make_pair(nums[i],i));
    10             //m[nums[i]]=i;
    11         }
    12     return {};
    13     }
    14 };
    这里哈希表插入一共由三种方法,都在代码中有记录。
    大括号为vector的初始化方法。

    两遍哈希

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int>& nums, int target) {
     4 
     5         unordered_map<int,int> m;
     6 
     7         for(int i = 0; i<nums.size(); i++)
     8             m[nums[i]] = i;         //向map中添加元素
     9         
    10         for(int i = 0; i<nums.size(); i++)
    11         {
    12             if(m.find(target-nums[i]) != m.end() && m[target-nums[i]] != i)  //如果m中存在对应的键值,且不为i
    13                 return {i, m[target-nums[i]]};
    14         }
    15         return {};
    16     }
    17 };
    18 
    19 作者:zrita
    20 链接:https://leetcode-cn.com/problems/two-sum/solution/c-san-chong-fang-fa-jian-dan-yi-dong-ji-bai-100-z-/
    21 来源:力扣(LeetCode)
    22 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Generative Adversarial Nets
    【 剑指Offer 1 】数据结构
    Hopfield神经网络
    LSTMs 长短期记忆网络系列
    【 记忆网络 2 】 End-to-End Memory Network
    MessagePack Java Jackson Dataformat
    MessagePack Java 0.6.X 动态类型
    MessagePack Java 0.6.X 可选字段
    MessagePack Java 0.6.X 不使用注解(annotations)来序列化
    MessagePack Java 0.6.X List, Map 对象的序列化和反序列化
  • 原文地址:https://www.cnblogs.com/rookiez/p/13163783.html
Copyright © 2020-2023  润新知