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
  • 相关阅读:
    Spring中的AOP
    P2782 友好城市
    1576 最长严格上升子序列
    1058 合唱队形 2004年NOIP全国联赛提高组
    5294 挖地雷
    1643 线段覆盖 3
    4768 跳石头
    1026 逃跑的拉尔夫
    2727:仙岛求药
    codevs 4888 零件分组
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12610268.html
Copyright © 2011-2022 走看看