• 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;
        }
  • 相关阅读:
    Date计算人活了多少天
    微信红包平均分法
    math practise
    Array sort
    static memory management
    java数组中的选择排序
    java数组中的冒泡排序
    数组联系2 模拟酒店系统
    数组练习1(模拟栈)
    二维数组
  • 原文地址:https://www.cnblogs.com/jimobuwu/p/9755371.html
Copyright © 2020-2023  润新知