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]);
    
    
                }
    
    
            }
    
    
        }
    
    
    };
     
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    ubuntu 12.04 LTS 如何使用更快的更新源
    虚拟机安装ubuntu问题解决办法
    云计算
    Hadoop多节点集群安装配置
    Apache Lucene学习笔记
    Struts2运行流程
    数据结构与算法分析 java语音描述(引论)
    事物与分布式事物原理实践
    Get,Post请求中文乱码问题有效解决方法
    Vue2.5开发去哪儿网App 第四章笔记 下
  • 原文地址:https://www.cnblogs.com/hujianglang/p/11521255.html
Copyright © 2011-2022 走看看