欢迎访问我的剑指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-1
、j=n-1
、len=m+n-1
,i
从后向前遍历数组nums1
,j
从后向前遍历数组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;
}
}
}
};