zoukankan      html  css  js  c++  java
  • Two sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific target.

    You may assume that each input would have exactly one solution, and you may not use the same element twice.

    Example:

    Given nums = [2, 7, 11, 15], target = 9,
    
    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 1].

    //method1:
    class Solution{
        public:
            vector<int> twoSum(vector<int>& nums, int target){
                unordered_map<int,int> m;
                vector<int> res;
                for(int i = 0; i < nums.size(); ++i){
                    m[nums[i]] = i;
                }
                
                for(int i = 0; i < nums.size(); ++i){
                    int t = target - nums[i];
                    if(m.count(t) && m[t] != i){
                        res.push_back(i);
                        res.push_back(m[t]);
                        break;
                    }
                }
                return res;
            }
    };
    
    //method2:
    class Solution2{
        public:
            vector<int> twoSum(vector<int>& nums, int target){
                unordered_map<int,int> m;
                for(int i = 0; i < nums.size(); ++i){
                    if(m.count(target - nums[i])){
                        return {i,m[target - nums[i]]};
                    }
                    m[nums[i]] = i;
                }
                return {};
            }
    };


    方法3:
    #include <iostream>
    
    
    #include <vector>
    
    
    #include <map>
    
    
    #include <unordered_map>
    
    
    
    
    
    
    using namespace std;
    
    
    
    
    
    
    class Solution{
    
    
    public:
    
    
        vector<int> twoSum(vector<int>& nums, int target){
    
    
            vector<int> res;
    
    
            unordered_map<int,int> map;
    
    
    
    
    
    
            for(int i = 0; i < nums.size(); i++)
    
    
            {
    
    
                map[nums[i]] = i;
    
    
            }
    
    
    
    
    
    
            for(int i = 0; i < nums.size(); i++)
    
    
            {
    
    
                int left = target - nums[i];
    
    
                if(map.count(left) && i < map[left])
    
    
                {
    
    
                    res.push_back(i);
    
    
                    res.push_back(map[left]);
    
    
                }
    
    
            }
    
    
        }
    
    
    };
     
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    UVA 11859
    [OpenGL]OpenGL坐标系和坐标变换
    树状数组
    编程算法
    乞讨 间隔[a,b]在见面p^k*q*^m(k&gt;m)中数号码
    解析Android的 消息传递机制Handler
    Atitit.故障排除系列---php 计划网站数据库错误排除过程
    Remove Element
    [Angular Directive] Write a Structural Directive in Angular 2
    [Compose] 18. Maintaining structure whilst asyncing
  • 原文地址:https://www.cnblogs.com/hujianglang/p/11521255.html
Copyright © 2011-2022 走看看