【排序】88.合并两个有序数组

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

详情:

 

这题看起来像是数组题而不是排序题。

分析:

言归正传,这题说了是有序数组,要求在nums1上原地修改。

所以我们就要从后往前遍历,这样的话,可以把前面的位置腾出地方,不需要用额外的存储空间。

 

代码:

class Solution:
    def merge(self, nums1, m, nums2, n) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        # nums1, nums2的指针, 分别指向"最后一个元素"
        f_ptr, s_ptr = m-1, n-1
        # 总指针, 指向nums真正的最后一个元素
        r_ptr = len(nums1)-1
        while r_ptr >= 0 and f_ptr >= 0 and s_ptr >= 0:
            if nums1[f_ptr] >= nums2[s_ptr]:
                nums1[r_ptr] = nums1[f_ptr]
                f_ptr -= 1
            else:
                nums1[r_ptr] = nums2[s_ptr]
                s_ptr -= 1
            r_ptr -= 1
        while r_ptr >= 0 and s_ptr >= 0:
            nums1[r_ptr] = nums2[s_ptr]
            r_ptr -= 1
            s_ptr -= 1

 也可以这样:

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

 

posted @ 2022-09-26 17:32  BJFU-VTH  阅读(24)  评论(0编辑  收藏  举报