【LeetCode】手撕系列—88. 合并两个有序数组_双指针



1- 思路

定义三个指针 p1、p2 以及 cur;其中 p1 用于遍历 nums1;p2用于遍历 nums2;cur 为判断当前存储的元素
定义一个 sorted 数组长度为 (m+1),存储合并后的数组

  • 四个判断
    • if( p1 == m):此时表明,nums1中的数据已经存储完,则 cur = nums2[p2++]
    • if( p2 == n):此时表明,nums2中的数据已经存储完,则 cur = nums1[p1++]
    • if(nums1[p1] < nums2[p2]):则 cur = nums1[p1++]
    • 剩余最后一个条件 cur = nums2[p2++]
  • 收集结果

2- 题解

⭐合并两个有序数组 ——题解思路

在这里插入图片描述

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1=0 , p2=0;
        int[] sorted = new int[m+n];

        int cur;
        while(p1<m || p2<n){
            if(p1 == m){
                cur = nums2[p2++];
            }else if(p2 == n){
                cur = nums1[p1++];
            }else if(nums1[p1] < nums2[p2]){
                cur = nums1[p1++];
            }else{
                cur = nums2[p2++];
            }
            sorted[p1+p2-1] = cur;
        }

        for(int i = 0 ; i != m+n;i++){
            nums1[i] = sorted[i];
        }
    }
}

3- ACM模式

public class merge {
    public static void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1=0 , p2=0;
        int[] sorted = new int[m+n];

        int cur;
        while(p1<m || p2<n){
            if(p1 == m){
                cur = nums2[p2++];
            }else if(p2 == n){
                cur = nums1[p1++];
            }else if(nums1[p1] < nums2[p2]){
                cur = nums1[p1++];
            }else{
                cur = nums2[p2++];
            }
            sorted[p1+p2-1] = cur;
        }

        for(int i = 0 ; i != m+n;i++){
            nums1[i] = sorted[i];
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt();
        int n = scanner.nextInt();
        scanner.nextLine(); // Consume newline left-over

        int[] nums1 = new int[m + n]; // Assuming nums1 has enough space to hold additional elements from nums2
        int[] nums2 = new int[n];

        // Reading nums1 elements
        for (int i = 0; i < m; i++) {
            nums1[i] = scanner.nextInt();
        }
        scanner.nextLine(); // Consume newline left-over

        // Reading nums2 elements
        for (int i = 0; i < n; i++) {
            nums2[i] = scanner.nextInt();
        }

        merge(nums1, m, nums2, n);

        // Output the merged array
        for (int i = 0; i < m + n; i++) {
            System.out.print(nums1[i] + " ");
        }
    }
}


相关推荐

  1. LeetCode 88. 合并有序数组

    2024-04-06 06:06:01       58 阅读
  2. leetcode88--合并有序数组

    2024-04-06 06:06:01       44 阅读
  3. Leetcode|#88.合并有序数组

    2024-04-06 06:06:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-06 06:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-06 06:06:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-06 06:06:01       82 阅读
  4. Python语言-面向对象

    2024-04-06 06:06:01       91 阅读

热门阅读

  1. 提升写作效率:ChatGPT助力学术论文撰写

    2024-04-06 06:06:01       36 阅读
  2. 详解Qt中的容器

    2024-04-06 06:06:01       34 阅读
  3. Qt基本控件

    2024-04-06 06:06:01       29 阅读
  4. centos 7 MySQL 离线一键自动安装脚本

    2024-04-06 06:06:01       34 阅读
  5. 空和null是两回事

    2024-04-06 06:06:01       33 阅读
  6. linux模糊删除文件命令

    2024-04-06 06:06:01       37 阅读
  7. 【QT教程】QML与C++的交互

    2024-04-06 06:06:01       30 阅读