• Leetcode每日一题 88.合并两个有序数组


    88. 合并两个有序数组

    给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

    初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

    示例一:

    输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
    输出:[1,2,2,3,5,6]
    

    示例二:

    输入:nums1 = [1], m = 1, nums2 = [], n = 0
    输出:[1]
    

    提示:

    • nums1.length == m + n
    • nums2.length == n
    • 0 <= m, n <= 200
    • 1 <= m + n <= 200
    • -10^9 <= nums1[i], nums2[i] <= 10^9

    一个暴力法O(m*n)一个双指针法O(m+n)

    class Solution {
    public:
        void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
            /*
            map<int,int> maps;
    
            for(int i = 0 ; i < m ; i++)
                maps[nums1[i]]++;
            for(int i = 0 ; i < n ; i++)
                maps[nums2[i]]++;
            nums1.clear();
    
            for(auto x: maps)
            {
                for(int i = 0 ; i < x.second ; i++)
                    nums1.push_back(x.first);
            }
            */
    
            int mp = 0 , np = 0;
            vector<int> ans;
    
            while(mp < m || np < n)
            {
                if(mp == m || np == n){
                    mp == m ?ans.push_back(nums2[np++]) : ans.push_back(nums1[mp++]);
                    continue;
                }
                if(nums1[mp] > nums2[np])
                    ans.push_back(nums2[np++]);
                else if(nums1[mp] < nums2[np])
                    ans.push_back(nums1[mp++]);
                else
                {
                    ans.push_back(nums1[mp++]);
                    ans.push_back(nums2[np++]);
                }
            }
    
            nums1.clear();
            for(auto x : ans)
                nums1.push_back(x);
        }
    };
    
  • 相关阅读:
    Linux
    Linux
    Linux
    Linux
    Linux
    Python
    Linux
    Python
    MySQL
    Python
  • 原文地址:https://www.cnblogs.com/xiangqi/p/14619508.html
Copyright © 2020-2023  润新知