zoukankan      html  css  js  c++  java
  • leetcode 1. 两数之和

    题目:

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

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

    示例:

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

    思路:

      1、暴力法

        遍历每个元素x,寻找和 target-x 相等的目标值

        时间复杂度为O(n^2)

      2、两次哈希

        我们首先将原来的数组放到哈希表中,key = nums[i] ,value = i

        之后我们再遍历元素x,看hash[target-x]是否存在

        时间复杂度O(n)

      3、一次哈希

        实际上,我们还可以做到更快,在进行迭代并将元素插入到表中的同时,

        我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。

        如果它存在,那我们已经找到了对应解,并立即将其返回。

    代码:

      暴力

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

      两次哈希

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            int n = nums.size();
            
            map <int,int> m;
            for(int i=0;i<n;i++)
            {
                m[nums[i]] = i;
            }
            vector <int> ans;
            for(int i=0;i<n;i++)
            {
                int k = m[target-nums[i]];
                if(k&&k!=i)
                {
                    ans.push_back(i);
                    ans.push_back(k);
                    break;
                }
            }
            return ans;
        }
    };

      一次哈希

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            int n = nums.size();
            
            map <int,int> m;
            
            vector <int> ans;
            
            for(int i=0;i<n;i++)
            {
                auto iter = m.find(target-nums[i]);
                if(iter != m.end())
                {
                    ans.push_back(m[target-nums[i]]);
                    ans.push_back(i);
                }
                m[nums[i]] = i;
            }
            return ans;
        }
    };
  • 相关阅读:
    ReLu(Rectified Linear Units)激活函数
    转载 deep learning:八(SparseCoding稀疏编码)
    转载 Deep learning:一(基础知识_1)
    转载 Deep learning:二(linear regression练习)
    转载 Deep learning:三(Multivariance Linear Regression练习)
    转载 Deep learning:四(logistic regression练习)
    转载 Deep learning:五(regularized线性回归练习)
    转载 Deep learning:七(基础知识_2)
    转载 Deep learning:六(regularized logistic回归练习)
    Java环境的配置
  • 原文地址:https://www.cnblogs.com/simplekinght/p/9566679.html
Copyright © 2011-2022 走看看