zoukankan      html  css  js  c++  java
  • [LeetCode] 88. 合并两个有序数组

    题目链接 : https://leetcode-cn.com/problems/merge-sorted-array/

    题目描述:

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

    说明:

    • 初始化 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 = [4,5,6,0,0,0],nums2 = [1,2,3]

    nums1 = [1,2,3,0,0,0],nums2 = [4,5,6]

    就可以理解代码了!

    代码:

    python

    class Solution:
        def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
            """
            Do not return anything, modify nums1 in-place instead.
            """
            i = m - 1
            j = n - 1
            k = m + n - 1
            while i >= 0 and j >= 0:
                if nums1[i] > nums2[j]:
                    nums1[k] = nums1[i]
                    i -= 1
                else:
                    nums1[k] = nums2[j]
                    j -= 1
                k -= 1
            while j >= 0:
                nums1[k] = nums2[j]
                k -= 1
                j -= 1
    

    java

    class Solution {
        public void merge(int[] nums1, int m, int[] nums2, int n) {
            int i = m - 1;
            int j = n - 1;
            int 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--];   
        }
    }
    
  • 相关阅读:
    基于硬件的毕业设计论文的书写
    C语言程序设计课程总结
    嵌入式程序设计第三周成绩汇总
    C第十八次课
    2016-4班平时成绩第9周排名和汇总
    2016-3班平时成绩第9周汇总和排名
    第十七次课大纲
    第十六次课大纲
    2020-02-28
    2020-02-27
  • 原文地址:https://www.cnblogs.com/powercai/p/11012757.html
Copyright © 2011-2022 走看看