88. Merge Sorted Array合并两个有序数组Python & Java

给定两个已排序的整数数组nums1和nums2,将nums2合并为nums1作为一个已排序的数组。

1. 在nums1和nums2中初始化的元素数分别为m和n

2. 假设nums1有足够的空间(大小大于或等于m + n)来容纳nums2中的其他元素

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

           m=5                            n=1

Output: [1,2,3,4,5,6]

把nums1中m~m+n的元素替换成nums2的元素

只需要一个for循环,因为for i in range(m,m+n),i每次都+1但是基数是m,所以想要从nums2的第1个数开始就i-m就可以了。

把两个列表合并之后,所以写sort排序,over。

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        j=m+n
        for i in range(m,j):
            nums1[i]=nums2[i-m]           
        return nums1.sort()

(一年之后再看自己写的东西, 写的个啥玩意) 

Java

选择倒序, 将两个数组中大的那个插入到后面

  1. 建立两个指针, 分别指向nums1和nums2的最大的数
  2. 建立一个for遍历两个数组, 并将最大的数添加到nums1末尾
    1. 当nums1数遍历完并且nums2还有时,将所有nums2的数按顺序添加到nums1上
    2. 当nums2遍历完,nums1还有时,直接返回,因为数组本来就是升序的
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int n1 = m - 1, n2 = n - 1;
        for (int i = m + n - 1; i >= 0; i--) {
            if(n1>=0&&n2>=0) {
                if (nums1[n1] > nums2[n2]) {
                    nums1[i] = nums1[n1];
                    n1--;
                } else {
                    nums1[i] = nums2[n2];
                    n2--;
                }
            } else if (n1 < 0) {//注意当出现nums1=[0] nums2=[1]类似的情况时,只剩nums2
                nums1[i] = nums2[n2];
                n2--;
            }else{
               return;
            }
        }
    }
}

时间复杂度O(M+N)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值