//给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
// 说明:
// 初始化 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]
// Related Topics 数组 双指针

c语言


  • 从后向前依次比较,比把大的放入尾部 要注意如果nums2最后没有比较完时,需要把nums2补到数组里面去
    图解

    1. //从后往前比较,往最后插
    2. void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    3. int tail = m + n - 1;
    4. m--;
    5. n--;
    6. while (m >= 0 && n >= 0) {
    7. if (nums1[m] >= nums2[n]) nums1[tail--] = nums1[m--];
    8. else nums1[tail--] = nums2[n--];
    9. }
    10. while (n >= 0) {
    11. nums1[tail--] = nums2[n--];
    12. }
    13. }
  • 合并数组,然后在排序
    后续学习了几种排序方法在补充