【双指针】LeetCode 88. 合并两个有序数组

题目链接

88. 合并两个有序数组

思路

看到题目的第一感觉就是用双指针进行原地合并,但是 nums1 的元素都在数组头部,如果正序合并的话非常容易破坏 nums1 的结构。

nums1 在数组尾部给我们留出了足够的额外空间,这一部分是不怕被破坏的,所以可以从数组尾部开始遍历,逆序合并。

代码

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1;
        int j = n - 1;
        int pos = nums1.length - 1;

        while(i >= 0 && j >= 0){
            if(nums1[i] > nums2[j]){
                nums1[pos] = nums1[i];
                i--;
            }else{
                nums1[pos] = nums2[j];
                j--;
            }
            pos--;
        }
        while(pos >= 0 && j >= 0){
            nums1[pos] = nums2[j];
            pos--;
            j--;
        }
    }
}
posted @ 2023-03-07 15:45  Frodo1124  阅读(20)  评论(0编辑  收藏  举报