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]);
    
    
                }
    
    
            }
    
    
        }
    
    
    };
     
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    linux下压缩-解压命令
    配置 samba
    我如何在Linux shell脚本提示输入?
    乔布斯语录
    Oracle 查看表空间及扩容
    Linux添加/删除用户和用户组
    学习进度条
    作业8:单元测试练习(个人练习)
    作业7: 用户体验设计案例分析
    作业6 成绩录入系统设计 阶段一
  • 原文地址:https://www.cnblogs.com/hujianglang/p/11521255.html
Copyright © 2011-2022 走看看