88. 合并两个有序数组 + 合并数组 + 双指针

2021-06-08 09:05

阅读:663

标签:insert   oid   否则   lang   sorted   --   循环   而且   lazy   

88. 合并两个有序数组

LeetCode_88

题目描述

技术图片

方法一:暴力法

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for(int i=0, j=0; j= m ){
                nums1[i] = nums2[j];
                i++;
                j++;
            }else{
                if(nums1[i] > nums2[j]){
                    insert(i, nums2[j], nums1, m++);
                    i++;
                    j++;
                }else i++;
            }
            
        }

    }
    public void insert(int pos, int val, int[] nums1, int num){
        for(int i = num; i>pos; i--){
            nums1[i] = nums1[i-1];
        }
        nums1[pos] = val;
    }
}

方法二:双指针法

  1. 考虑到这两个数组都是有序的数组,而且nums1后面留有空余的位置。
  2. 可以从尾开始遍历,依次向nums1的尾部填写元素。
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p = m+n-1;
        int p1 = m-1;
        int p2 = n-1;
        while(p2 >= 0){//注意循环的条件,这里一定是p2>=0,否则出错
            if(p1 >= 0 && nums1[p1] > nums2[p2]){
                nums1[p] = nums1[p1];
                p--;
                p1--;
            }else{
                nums1[p] = nums2[p2];
                p--;
                p2--;
            }
        }
    }
}

88. 合并两个有序数组 + 合并数组 + 双指针

标签:insert   oid   否则   lang   sorted   --   循环   而且   lazy   

原文地址:https://www.cnblogs.com/GarrettWale/p/14531855.html


评论


亲,登录后才可以留言!