双指针2合并两个有序数组
Posted 念奕玥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双指针2合并两个有序数组相关的知识,希望对你有一定的参考价值。
leetcode 88. 合并两个有序数组
分析:两个数组都有序。把nums2合并到nums1中去,不额外新建数组。
思路:两个数组,所以一个数组放一个指针。由于数组都有序,所以指针的开始位置可以选择都从头或尾开始。由于需要把nums2合并到nums1中去,指针从头部开始遍历容易造成nums1原本数据被覆盖掉,所以选择两个指针都从数组的尾部开始。
然后开始对两个数组的值进行比较。
class Solution
public void merge(int[] nums1, int m, int[] nums2, int n)
// int[] res = new int[m+n];
int i=m-1,j=n-1,index=m+n-1;
while(i>=0 && j>=0)
if(nums1[i]<=nums2[j])
nums1[index--]=nums2[j--];
else
nums1[index--]=nums1[i--];
//若nums2种数据未遍历完
if(j>=0)
while(j>=0 & index>=0) nums1[index--]=nums2[j--];
//不额外考虑nums1未遍历完的情况,若nums1未遍历完,说明留下的都是排好序的数值小的值
//还在原位置即可
以上是关于双指针2合并两个有序数组的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—88. 合并两个有序数组(数组+双指针)—day23
Leetcode刷题100天—88. 合并两个有序数组(数组+双指针)—day23