【CT】LeetCode手撕—88. 合并两个有序数组

目录

  • 题目
  • [1- 思路](#1- 思路)
  • [2- 实现](#2- 实现)
    • [⭐88. 合并两个有序数组------题解思路](#⭐88. 合并两个有序数组——题解思路)
  • [2- ACM实现](#2- ACM实现)

题目


1- 思路

模式识别

  • 模式1:两个有序数组合并 ------> 双指针
  • 模式2:返回结果填充到 nums1m+n ------> 需要开辟新的数组空间 sortedm+n 最后结果赋值给 nums1

思路

  • 1.定义双指针 :分别指向 nums1nums2
  • 2.开辟新的数组空间sorted[m+n] ,在合并完之后赋值

2- 实现

⭐88. 合并两个有序数组------题解思路

java 复制代码
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int[] sorted = new int[m+n];
        int si = 0;
        int index1=0,index2=0;
        while(index1<m && index2<n){
            if(nums1[index1]<=nums2[index2]){
                sorted[si++] = nums1[index1++];
            }else{
                sorted[si++] = nums2[index2++];
            }
        }

        while(index1<m){
            sorted[si++] = nums1[index1++];
        }
        while(index2<n){
            sorted[si++] = nums2[index2++];
        }
        // 赋值给 nums1
        for(int i = 0 ; i < m+n;i++){
            nums1[i] = sorted[i];
        }
    }
}

2- ACM实现

java 复制代码
public class mergeTwoArrays {

    public static int[] mergeTwoArrays(int[] nums1,int m, int[] nums2,int n){
        int index1 = 0,index2 = 0;
        int si = 0;
        int[] sorted = new int[m+n];
        while(index1<m && index2<n){
            if(nums1[index1]<=nums2[index2]){
                sorted[si++] = nums1[index1++];
            }else{
                sorted[si++] = nums2[index2++];
            }
        }
        while(index1<m){
            sorted[si++] = nums1[index1++];
        }
        while(index2<n){
            sorted[si++] = nums2[index2++];
        }
        for(int i = 0 ; i < m+n;i++){
            nums1[i] = sorted[i];
        }
        return nums1;
    }

    public static void main(String[] args) {
        System.out.println("输入数组1和数组2长度 m 和 n");
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();

        int[] nums1 = new int[m+n];

        int[] nums2 = new int[n];

        System.out.println("输入数组1");
        for(int i = 0 ; i <m;i++){
            nums1[i] = sc.nextInt();
        }
        System.out.println("输入数组2");
        for(int j = 0 ; j < n;j++){
            nums2[j] = sc.nextInt();
        }
        int[] res = mergeTwoArrays(nums1,m,nums2,n);
        for(int r:res){
            System.out.print(r+" ");
        }
    }
}
相关推荐
QiLinkOS3 分钟前
《打破“用爱发电”:一种基于 Gitee 与时间戳的开源权益分配机制探索》
c语言·数据结构·c++·科技·算法·gitee·开源
松间听晚36 分钟前
Agentic RL 环境和代码学习:以HGPO为例
算法
智者知已应修善业44 分钟前
【51单片机用T0定时器方式1,实现0.5S的时间间隔实现第一次一个灯亮、第二次二个灯亮,直到全部灯亮,然后重复整个过程】2023-12-29
c++·经验分享·笔记·算法·51单片机
小许同学记录成长1 小时前
几何体编辑与布尔运算
算法·无人机
fanged1 小时前
简单看看3A算法2(TODO)
算法
智者知已应修善业1 小时前
【51单片机4位静态数码管显示1234】2023-11-14
c++·经验分享·笔记·算法·51单片机
♡すぎ♡1 小时前
镜面 IBL 预过滤贴图的计算
算法·计算机图形学·贴图·pbr
Lsk_Smion2 小时前
力扣实训 _ [200].岛屿数量
算法·leetcode·深度优先
Boom_Shu2 小时前
长方形的关系
数据结构·c++·算法
ZhengEnCi2 小时前
O07-银行家算法
算法