zoukankan      html  css  js  c++  java
  • LeetCode 题解 | 1. 两数之和

    题目描述:

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

    你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]

    方法一、暴力解法:

    暴力法很简单,遍历每个元素 [公式] ,并查找是否存在一个值与 [公式] 相等的目标元素。

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            int len=nums.size();
    
            for(int i=0;i<len-1;i++)
            for(int j=i+1;j<len;j++)
            {
                if(nums[i]+nums[j]==target)
                return {i,j};
            }
            
           return {};
        }
    };
    

    方法二: 一遍哈希

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
    
            unordered_map<int,int> m;
            
            for(int i=0;i<nums.size();i++)
            {
                if(m.find(target-nums[i])!=m.end())//m中存在对应的键值
                    return {m[target-nums[i]],i};//因为i为较大的元素,此时添加进去的键值都还小于i,所以i在后面
    
                m[nums[i]]=i;  //向map中添加元素
            }
            return {};
        }
    };
    

    方法三: 两遍哈希

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
    
            unordered_map<int,int> m;
    
            for(int i=0;i<nums.size();i++)
                m[nums[i]]=i;   //向map中添加元素
            
            for(int i=0;i<nums.size();i++)
            {
                if(m.find(target-nums[i])!=m.end()&&m[target-nums[i]]!=i)//m中存在对应的键值,并且不为i
                    return {i,m[target-nums[i]]};
            }
            return {};
        }
    };
    
  • 相关阅读:
    元素居中浏览器的多种方法集锦
    javascript深入理解js闭包
    闭包
    碎片
    define
    define定义方法
    创建数据库sql语句
    java十进制转换成二进制数
    java解析JSON数据
    java实现最通俗易懂的01背包问题
  • 原文地址:https://www.cnblogs.com/RioTian/p/12395193.html
Copyright © 2011-2022 走看看