/*
 * @lc app=leetcode.cn id=88 lang=c
 *
 * [88] 合并两个有序数组
 *
 * https://leetcode-cn.com/problems/merge-sorted-array/description/
 *
 * algorithms
 * Easy (43.05%)
 * Total Accepted:    31.4K
 * Total Submissions: 73K
 * Testcase Example:  '[1,2,3,0,0,0]\n3\n[2,5,6]\n3'
 *
 * 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
 * 
 * 说明:
 * 
 * 
 * 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
 * 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
 * 
 * 
 * 示例:
 * 
 * 输入:
 * 
 * nums1 = [1,2,3,0,0,0], m = 3
 * nums2 = [2,5,6],       n = 3
 *     
 * 输出: [1,2,2,3,5,6]
 * 
 */
void merge(int* nums1, int m, int* nums2, int n) {
    int i =m-1;
    int j =n-1;
    int k = m+n-1;
    while(i>=0&&j>=0){
        if(nums1[i]>=nums2[j]){
            nums1[k--] = nums1[i];
            i--;
        }
        else
        {
            nums1[k--]=nums2[j];
            j--;
        }
    }
    while(j>=0){
        nums1[k--]=nums2[j];
        j--;
    }
    return nums1;
}

思路是,设立两个下标,都从逆序开始。因为是有序的数组,所以从最后开始,把更大的值传到nums1中。

经过比较后,如果nums2还有值的话,就把nums2剩下的值传进nums1中即可。

-----------------------------------------------------------------------------------------------------------------------------------------

python:

#
# @lc app=leetcode.cn id=88 lang=python3
#
# [88] 合并两个有序数组
#
# https://leetcode-cn.com/problems/merge-sorted-array/description/
#
# algorithms
# Easy (43.05%)
# Total Accepted:    31.4K
# Total Submissions: 73K
# Testcase Example:  '[1,2,3,0,0,0]\n3\n[2,5,6]\n3'
#
# 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
# 
# 说明:
# 
# 
# 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
# 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
# 
# 
# 示例:
# 
# 输入:
# nums1 = [1,2,3,0,0,0], m = 3
# nums2 = [2,5,6],       n = 3
# 
# 输出: [1,2,2,3,5,6]
# 
#
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.
        """
        nums1[m:m+n] = nums2[:n]
        nums1.sort()

python就简单很多,直接合并数组,然后排序。。。=。=