原题链接: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]
题目翻译:
给定两个有序整数数组nums1和nums2,将nums2合并到nums1中得到一个有序数组。
注意:假定nums1有足够的空间(其大小大于等于m+n)来存放nums2的元素。nums1和nums2初始时分别有m和n个元素。
Tips:从合并后nums1的尾部元素开始,依次向前确定每个元素的值应该是多少。
Python
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: void Do not return anything, modify nums1 in-place instead.
"""
p, q = m-1, n-1
while p >= 0 and q >= 0:
if nums1[p] > nums2[q]:
nums1[p+q+1] = nums1[p]
p = p-1
else:
nums1[p+q+1] = nums2[q]
q = q-1
nums1[:q+1] = nums2[:q+1]
C++
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int p = m-1, q = n-1;
while (p >= 0 && q >= 0){
if (nums1[p] > nums2[q]){
nums1[p+q+1] = nums1[p];
p -= 1;
}
else{
nums1[p+q+1] = nums2[q];
q -= 1;
}
}
for(int i=0; i<=q; i++){
nums1[i] = nums2[i];
}
}
};