剑指offer(第二版)面试题4. 二维数组中的查找,leetcode 88. Merge Sorted Array

欢迎访问我的剑指offer(第二版)题解目录
对应的leetcode题目可点击leetcode 88. 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.

算法设计

定义三个指针i=m-1j=n-1len=m+n-1i从后向前遍历数组nums1j从后向前遍历数组nums2,同时比较i指向的数字和j指向的数字的大小,将大的那个数字写入len指针处,同时递减len

C++代码

class Solution {
   public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int len = m + n - 1;
        for (int i = m - 1, j = n - 1; len >= 0; --len) {
            int k1 = i >= 0 ? nums1[i] : nums2[j] - 1, k2 = j >= 0 ? nums2[j] : nums1[i] - 1;
            if (k1 > k2) {
                nums1[len] = k1;
                --i;
            } else {
                nums1[len] = k2;
                --j;
            }
        }
    }
};
发布了528 篇原创文章 · 获赞 1015 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/richenyunqi/article/details/103387315