zoukankan      html  css  js  c++  java
  • 【leetcode】88. Merge Sorted Array

    题目说明

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
    https://leetcode-cn.com/problems/merge-sorted-array/

    解法1

    时间复杂度:O(n)
    空间复杂度:O(n)
    思路:额外使用数组来保存合并过程中的数据,比较两数组对应元素的大小,将较小的元素保存在新的数组中,最后需要将两数组中没有比较的元素添加到新数组的末尾。

    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
    {
        vector<int> temp;
        int i = 0, j = 0;
        for (; i < m && j < n; )
        {
            temp.push_back(nums1[i] < nums2[j] ? nums1[i++]:nums2[j++]);
        }
        if (i < m)
        {
            for (;i < m; i ++)
                temp.push_back(nums1[i]);
        }
        else if (j < n)
        {
            for (;j < n; j ++)
                temp.push_back(nums2[j]);
        }
        nums1 = temp;
    }
    

    解法2

    时间复杂度:O(n)
    空间复杂度:O(1)
    思路:从后往前开始比较与赋值,这样就不需要申请额外的空间来保存结果了,直接使用nums的空间。第一轮循环结束后,若i>0,则不需要再次合并(因为元素已经在数组中了);若j>0,说明nums2还有元素未合并到数组中,需要对num2再进行操作。

    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
    {
        int i = m - 1, j = n - 1,k = m + n - 1;
        while (i >=0 && j >=0)
        {
            nums1[k --] = nums1[i] >  nums2[j] ? nums1[i--] : nums2[j--];
        }
        while(j >= 0)
        {
            nums1[k --] = nums2[j--];
        }
    }
  • 相关阅读:
    验证 Email
    取系统时间
    DbHelperSQL.cs
    显示BYTE流图片
    [原]c# 读取文本文件(txt)
    数据库文件组和文件的作用
    Transact—SQL
    m_pMainWnd
    sql server 2005 window 身份证验证模式与SQL Server身份验证
    WM_CLOSE WM_DESTROY WM_QUIT
  • 原文地址:https://www.cnblogs.com/JesseTsou/p/10328648.html
Copyright © 2011-2022 走看看