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

    num1

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

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

    解法1: 直接的解法,两层循环,O(n2)的时间复杂度。

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

    解法2: 想要从两层循环变为一层循环,需要借助外部空间,将数据再保留一份出来。

    vector<int> twoSumTwoLoopHash(vector<int>& nums, int target)
        {
            map<int, int> mp;
            vector<int> solution;
            for(int i=0; i<nums.size(); ++i)
                // mp.emplace(std::make_pair(nums[i], i));
                mp[nums[i]] = i;
    
            for(int i=0; i<nums.size(); ++i)
            {
                if(mp.count(target-nums[i]) != 0 && mp[target-nums[i]] != i)
                {
                    solution.push_back(i);
                    solution.push_back(mp[target-nums[i]]);
                    break;
                }
            }
    
            return solution;
        }

    解法3: 解法2将时间复杂度从O(n2)降低到O(n)。还可以将两次for循环减少为一个。

    vector<int> twoSumOneLoopHash(vector<int>& nums, int target)
        {
            unordered_map<int, int> mp;
            vector<int> solution(2, -1);
    
            for(size_t i=0; i<nums.size() ; ++i)
            {
                if(mp.count(target-nums[i]) != 0 && mp[target-nums[i]] != i)
                {
                    solution[0] = i;
                    solution[1] = mp[target-nums[i]];
                    break;
                }
                mp[nums[i]] = i;
            }
    
            return solution;
        }
  • 相关阅读:
    selenium 难定位元素、时间插件
    列表生成式
    三元表达式
    监控日志
    非空即真
    深拷贝浅拷贝
    元组
    list字典嵌套
    2021
    布尔类型
  • 原文地址:https://www.cnblogs.com/jimobuwu/p/9755371.html
Copyright © 2011-2022 走看看