当前位置: 首页 > 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++;}}}
}

http://www.mrgr.cn/news/98001.html

相关文章:

  • MySQL 进阶 - 2 ( 12000 字详解)
  • C语言超详细指针知识(一)
  • 【学习笔记】头文件中定义函数出现重复定义报错
  • MySQL学习笔记7【InnoDB】
  • 【数据结构】排序
  • <C#> 详细介绍.NET 依赖注入
  • AD9253 LVDS 高速ADC驱动开发
  • ViewModel vs AndroidViewModel:核心区别与使用场景详解
  • TaskFlow开发日记 #1 - 原生JS实现智能Todo组件
  • Shell 编程之条件语句
  • Windows下编译SALOME
  • AI大模型学习六:‌小米8闲置,通过Termux安装ubuntu做个随身服务器
  • UE的AI判断队伍归属的机制:IGenericTeamAgentInterface接口
  • 代码随想录第15天:(二叉树)
  • 图书管理系统(Python)
  • 嵌入式---电机分类
  • ESP32S3 链接到 WiFi
  • Java学习手册:面向对象编程核心概念
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day12
  • AutoEval:现实世界中通才机器人操作策略的自主评估