zoukankan      html  css  js  c++  java
  • [刷题] 1 Two Sum

    要求

    • 给出一个整型数组nums
    • 返回这个数组中两个数字的索引值i和j
    • 使得nums[i]+nums[j]等于一个给定的target值
    • 两个索引不能相等

    实例

    • nums=[2,7,11,15], target=9
    • 返回[0,1]

    细节

    • 索引从0还是从1开始计算
    • 没有解怎么办
    • 有多个解怎么办

    思路

    • 暴力解法(n2)
    • 排序后,使用双索引对撞(nlogn+n=nlogn)
    • 查找表,将所有元素放入查找表,对每一个元素a,查找target-a是否存在(n)
    • 不要一次性将元素全部放入查找表中,相同元素会覆盖

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int>& nums, int target) {
     4         unordered_map<int,int> record;
     5         for( int i = 0 ; i < nums.size() ; i ++ ){
     6             int complement = target - nums[i];
     7             if( record.find( complement ) != record.end() ){
     8                 int res[2] = {i,record[complement]};
     9                 return vector<int>(res, res+2);
    10             }
    11             record[nums[i]] = i;    
    12         }
    13         throw invalid_argument("the input has no solution");
    14     }
    15 };
    View Code

    相关

    • 15 3Sum
    • 18 4Sum
    • 16 3Sum Closest
  • 相关阅读:
    动画02
    动画01
    css过渡
    06强制类型转换
    05强制类型转换
    jetson 安装opencv4.4.0
    cpp中的内置异常
    cpp中std::string和std::wstring 相互转换
    qt creator杂记
    win10 git bash 使用vim 显示 git log
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12610268.html
Copyright © 2011-2022 走看看