LeetCode简单题:88. 合并两个有序数组(Python,C++,Java)

一.解法

https://leetcode-cn.com/problems/merge-sorted-array/
要点:双指针
Python,C++,Java用了相同的双指针法,nums1从后往前插入
先找到nums1的i=m+n-1的位置,不断将nums1[m-1]和nums2[n-1]比较取大的放在i位置然后i--,同时m或n也--

二.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+n-1
        m-=1
        n-=1
        while n>=0:
            while m>=0 and nums1[m]>nums2[n]:
                temp=nums1[m]
                nums1[m]=nums1[i]
                nums1[i]=temp
                i-=1
                m-=1
            temp=nums2[n]
            nums2[n]=nums1[i]
            nums1[i]=temp
            i-=1
            n-=1

三.C++实现

class Solution {
public:
    void merge(vector& nums1, int m, vector& nums2, int n) {
    int i = m+n-1;
    m--;
    n--;
    while (n >= 0) {
        while (m >= 0 && nums1[m] > nums2[n]) {
            swap(nums1[i], nums1[m]);
            i--;m--;
        }
        swap(nums1[i], nums2[n]);
        i--;n--;
    }
}
};

四.java实现

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m+n-1;
        int temp;
        m--;
        n--;
    while (n >= 0) {
        while (m >= 0 && nums1[m] > nums2[n]) {
            temp=nums1[i];
            nums1[i]=nums1[m];
            nums1[m]=temp;
            i--;m--;
        }
        temp=nums1[i];
        nums1[i]=nums2[n];
        nums2[n]=temp;
        i--;n--;
    }
        
    }
}

你可能感兴趣的:(LeetCode简单题:88. 合并两个有序数组(Python,C++,Java))