/* * @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就简单很多,直接合并数组,然后排序。。。=。=