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

目录

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

题目


1- 思路

模式识别

  • 模式1:两个有序数组合并 ------> 双指针
  • 模式2:返回结果填充到 nums1[m+n] ------> 需要开辟新的数组空间 sorted[m+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+" ");
        }
    }
}
相关推荐
少许极端几秒前
算法奇妙屋(四十八)-单调栈
java·算法·单调栈
水木流年追梦12 分钟前
CodeTop Top 300 热门题目2-最长回文子串
开发语言·人工智能·python·算法·leetcode
图码12 分钟前
递归入门:从n到1的优雅打印之旅
数据结构·c++·算法·青少年编程·java-ee·逻辑回归·python3.11
大肥羊学校懒羊羊12 分钟前
题解:计算约数个数
数据结构·c++·算法
生信之灵22 分钟前
拓扑与曲率双剑合璧:scGeom如何从单细胞数据中“看见”细胞命运
人工智能·深度学习·算法·单细胞·多组学
良木生香23 分钟前
【C++初阶】:STL——String从入门到应用完全指南(3)
c语言·开发语言·数据结构·c++·算法
_深海凉_29 分钟前
LeetCode热题100-在排序数组中查找元素的第一个和最后一个位置
算法·leetcode·职场和发展
qyzm41 分钟前
Educational Codeforces Round 189 (Rated for Div. 2)
数据结构·python·算法
fox_lht41 分钟前
8.3.使用if let和let else实现简明的程序流控制
开发语言·后端·算法·rust
北顾笙9801 小时前
day28-数据结构力扣
数据结构·算法·leetcode