题目的链接在这里:
https://leetcode-cn.com/problems/merge-sorted-array/
题目大意
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
一、示意图
二、解题思路
java实现
代码如下:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//使用两个指针,分别指向他们的末尾,而还有一个指针,相当于就是用来找每次的最大值
//并且每次m,h移动的时候,pre也要对应的移动
//这里有这个细节在
int pre=(m--)+(n--)-1;
while(m>=0&&n>=0){
//只要这个条件还成立,也就是这两个数组都还有的情况之下,找到其中的最大值,并赋值给pre
//n--,m--不会存在数组越界嘛 比如 123000 和456
//不会越界的原因是 n--而不是--n 这样先返回的是n 不会出现-1
nums1[pre--]=nums1[m]<nums2[n]?nums2[n--]:nums1[m--];
}
//然后如果n还存在的话,也还是需要继续赋值的
while(n>=0){
nums1[pre--]=nums2[n--];
}
}
}