当前位置: 首页 > news >正文

Java习题:合并两个有序数组

文章目录

  • 前言
  • 一、题目描述
  • 二、方法
    • 2.1 方法一
    • 2.2 方法二


前言

虽然这个题目很简单,但是在使用java语言实现的过程中,存在多种方法这是很有意思的一道题,所以小编在这里写下它的各种方法加深javase语法的学习。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目描述

题目链接:合并两个有序数组

这是一道来自leetcode上的题目,比较基础也比较简单,下面为该题目的描述:
在这里插入图片描述


二、方法

2.1 方法一

这也是小编之前的思路,因为nums1的数组长度为两个数组长度的和,但是nums1本身存储的数组长度的元素个数为m个,nums2的数组长度为n,此时将两个数组直接拼接到一起然后在对整个数组进行排序。

图解
在这里插入图片描述
在这里直接将nums2中数组的数据拼接到nums1后面,然后使用java中Arrays中的方法sort对整个数组进行排序,如果如果后面碰到题目不允许用数组方法,那么可以自己写一个冒泡排序方法。

代码

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

        Arrays.sort(nums1);
    }
}

2.2 方法二

采用双指针法,对于两个数组都分别给定一个指针指向第一个元素,因为这两个数组都是有序序列,所以每次比较大小之后,把小的先放上去,然后再放剩下的。那么就会存在以下情况

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int[] num = Arrays.copyOf(nums1,m); //拷贝字符串的内容
        int i = 0;
        int j = 0;
        int x = 0;
        //在这里进入循环,循环结束的条件是其中一个数组遍历结束
        while(i < m && j < n) {
        	//里面也需要判断,因为有可能一个数组中所有的元素大于另外一个数组,导致遍历直接结束。

			//第一个数组中的元素大于第二个数组中的元素
             if(i < m && j < n &&nums2[j] <= num[i]) {
                nums1[x] = nums2[j];
                x++;
                j++;
            }
            
            //第二个数组中的元素大于第一个数组中的元素
            if(i < m && j < n && num[i] < nums2[j]) {
                nums1[x] = num[i];
                x++;
                i++;
            }
        }

		//这里是第一个数组遍历结束的情况,此时把第二个数组全部加到nums1的后面
        if(i == m) {
            while(x < m+n) {
                nums1[x] = nums2[j];
                x++;
                j++;
            }
        }
        //这里是第二个数组遍历结束的情况,此时把第二个数组全部加到nums1的后面
        if(j == n) {
            while(x < m+n) {
                nums1[x] = num[i];
                x++;
                i++;
            }
        }
    }
}

相关文章:

  • 蔚来汽车智能座舱接入通义大模型,并使用通义灵码全面提效
  • 巧记英语四级单词 Unit3-下【晓艳老师版】
  • HCIP-17 BGP基础2
  • 一文介绍阿里32B推理模型
  • 【软件测试】人工智能增强Web 自动化测试框架方案
  • C++ 入门四:类与对象 —— 面向对象编程的核心基石
  • 使用Mybatis时在XML中SQL高亮显示的方法
  • CExercise_10_2动态内存分配_1从键盘输入输入中读取一个整数n,动态分配一个长度为n的整型数组。
  • gcd之和
  • OpenCV 伪彩色处理
  • Linux 系统管理常用命令
  • RV1126 实现简单的UI方案
  • 【C++进阶】关联容器:multiset类型
  • Python代码解释
  • OpenCV 图形API(26)图像滤波-----方框滤波函数boxFilter()
  • SpringBoot系列之集成Redisson实现布隆过滤器
  • FastAPI全面指南:从入门到企业级应用实战
  • Java并发编程:深入解析原子操作类与CAS原理
  • SSH配置优化:提升本地内网Linux服务器远程连接速度与稳定性
  • 如何启动spark
  • 啥是东莞网站制作公司/销售平台
  • 品牌网站建设哪里有/网页设计框架图
  • 做网站时怎么更改区域内的图片/seo优化大公司排名
  • 微信小程序商家版/seo怎么做新手入门
  • 十堰外贸网站建设/郑州专业seo推荐
  • 临安做网站的公司有哪些/国内广告联盟平台