一.解法
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<int>& nums1, int m, vector<int>& 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--;
}
}
}