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

    This is a classic problem for hash table. The basic idea is to maintain a hash table for each element in nums, using the element as key and its index (in this problem, 1-based) as value. Then for each num of nums, search for target - num in the hash table. If it is found and is not the same as num, then we are done. Notice that the problem statement has excluded the case of duplicates by stating that "each input would have exactly one solution".

    Now you may quickly write down the following code.

     1 vector<int> twoSum(vector<int>& nums, int target) {
     2     vector<int> ans;
     3     unordered_map<int, int> mp;
     4     for (int i = 0; i < nums.size(); i++)
     5         mp[nums[i]] = i + 1;
     6     for (int i = 0; i < nums.size(); i++) {
     7         if (mp.find(target - nums[i]) != mp.end() && mp[target - nums[i]] != i + 1) {
     8             ans.push_back(i + 1);
     9             ans.push_back(mp[target - nums[i]]);
    10             return ans;
    11         }
    12     }
    13 }

    Notice the above code has two for loops to iterate over nums. In fact, the process of building the hash table and searching in it can be done in one pass. Each time before you add a num to mp, just search for target - num first. The code now becomes as follows.

     1 vector<int> twoSum(vector<int>& nums, int target) {
     2     vector<int> ans;
     3     unordered_map<int, int> mp;
     4     for (int i = 0; i < nums.size(); i++) {
     5         if (mp.find(target - nums[i]) != mp.end() && mp[target - nums[i]] != i + 1) {
     6             ans.push_back(mp[target - nums[i]]);
     7             ans.push_back(i + 1);
     8             return ans;
     9         }
    10         mp[nums[i]] = i + 1; 
    11     }
    12 }
  • 相关阅读:
    git 的学习使用记录
    Servlet发送邮件遇到的问题SMTPSendFailedException 554
    如何高效地写CSS--等以后有空多加总结一下
    前端技术科技树梳理
    React了解
    读取Excel文件
    Eclipse不能自动编译 java文件
    破天荒地敲下第一篇
    SRM DIV2 569 TheDeviceDiv2
    SRM DIV2 570 RobotHerbDiv2
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4561484.html
Copyright © 2011-2022 走看看