9.10 练手 88

Leetcode 88. Merge Sorted Array

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:

  • The number of elements initialized in nums1 and nums2 are m and n respectively.
  • You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.

Example:

Input:

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

Output: [1,2,2,3,5,6]
 
class Solution(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: None Do not return anything, modify nums1 in-place instead.
        """
        if (n == 0 or m == 0):
      
            if (m == 0):
                return nums2
        if(nums1[m-1] < nums2[0]):
            nums1[m:m+n] = nums2
            return nums1
        elif(nums2[n-1] < nums1[0]):
            nums1[n:m+n] = nums1
            nums1[0:n] = nums2
            return nums1
        removeNum = [x for x in range(m)]
        nums2Index = [0] * n
        index = 0
        breakPoint = n
        for i in range(n):
            while index < m:
                if (nums1[index] <= nums2[i]):
                    index += 1
                else:
                    nums2Index[i] = removeNum[index]
                    removeNum[index] += 1
                    break
            if( index >= m and i < n):
                breakPoint = i
                break

        for i in range(1, m):
            if (removeNum[i-1] != i-1):
                removeNum[i] = removeNum[i] + removeNum[i - 1] - (i-1)
        for i in range(m - 1, -1, -1):
            nums1[removeNum[i]] = nums1[i]
        for j in range(n):
            if(j>= breakPoint):
                break
            nums1[nums2Index[j]] = nums2[j]
        nums1[m+breakPoint:m+n] = nums2[breakPoint: n]

        return nums1

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值