• LeetCode 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]

    1. 使用 javascript 内置 api, 时间复杂度主要是 sort 那里的 O(nlogn),缺点就是没有利用好数组排序的特点

    /**
     * @param {number[]} nums1
     * @param {number} m
     * @param {number[]} nums2
     * @param {number} n
     * @return {void} Do not return anything, modify nums1 in-place instead.
     */
    var merge = function(nums1, m, nums2, n) {
        nums1.splice(m);
        nums2.splice(n)
        nums1.push(...nums2);
        nums1.sort((a,b) => a-b);
    };
    

    2. 遍历排序,缺点依然是没用利用好数组排序的特点

    /**
     * @param {number[]} nums1
     * @param {number} m
     * @param {number[]} nums2
     * @param {number} n
     * @return {void} Do not return anything, modify nums1 in-place instead.
     */
    var merge = function(nums1, m, nums2, n) {
        for(let i = 0 ; i < nums2.length;i++) {
            nums1[m+i] = nums2[i];
        }
        return nums1.sort((a,b) => a-b);
    };
    

    3. 从前往后遍历,时间复杂度 O(n)级别

    /**
     * @param {number[]} nums1
     * @param {number} m
     * @param {number[]} nums2
     * @param {number} n
     * @return {void} Do not return anything, modify nums1 in-place instead.
     */
    var merge = function(nums1, m, nums2, n) {
        let len1 = m - 1;
        let len2 = n - 1;
        let len = m + n - 1;
        while(len1 >= 0 && len2 >= 0) {
            nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
        }
        nums1.splice(0, len2 + 1, ...nums2.slice(0, len2 + 1) );
    };
    
  • 相关阅读:
    SQL Server 2005 Beta 2 快照隔离 zt
    WP7基础学习第九讲
    WP7基础学习第七讲
    WP7基础学习第二讲
    如何对HttpWebRequest异步调用?
    WP7基础学习第五讲
    如何对HttpWebRequest和HttpWebRsponse异步调用?
    WP7基础学习第六讲
    WP7基础学习第一讲
    [收藏学习]gcc和g++
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13367040.html
Copyright © 2020-2023  润新知