题目描述
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
解题思路
1、两个数组都是有序的,nums1有足够的空间
2、类似归并排序最后一步,将两个有序数组合并成一个有序数组
3、代码逻辑:从数组的尾部开始比较大小
代码
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int tail1 = m - 1, tail2 = n - 1, finished = m + n - 1;
while(tail1 >= 0 && tail2 >= 0){
nums1[finished--] = (nums1[tail1] > nums2[tail2]) ?
nums1[tail1--] : nums2[tail2--];
}
while(tail2 >= 0){
nums1[finished--] = nums2[tail2--];
}
}
}
代码2
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int index1 = m - 1, index2 = n - 1, indexMerge = m + n - 1;
while(index1 >= 0 || index2 >= 0){
if(index1 < 0){
nums1[indexMerge--] = nums2[index2--];
}else if(index2 < 0){
nums1[indexMerge--] = nums1[index1--];
}else if(nums1[index1] > nums2[index2]){
nums1[indexMerge--] = nums1[index1--];
}else{
nums1[indexMerge--] = nums2[index2--];
}
}
}
}