NC22 合并两个有序的数组 - java语言实现

news2024/9/29 9:21:04

文章目录

  • 1. 题目描述
  • 2. 题目解读
  • 3. 思路
  • 4. 代码实现
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。


1. 题目描述

给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组

题目要求:
1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了,且后台会自动将合并后的数组 A 的内容打印出来,所以也不需要自己打印
3. A 数组在[0,m-1]的范围也是有序的
示例
输入:
[1,2,3],[2,5,6]
返回值:
[1,2,2,3,5,6]

2. 题目解读

数组A有m个元素,数组B中有个元素,数组A中有足够的空间(m+n)存放两个数组合并后的元素,但是合并后的数组A是有序的。
【注】不要使用sort函数,自己实现方法合并数组。

3. 思路

方式一:直接把B数组存放到A数组后面,再利用Sort函数进行排序即可;但这样只是取巧的方式,我们需要一些简单的思想算法来进行解题。- (不推荐,如果实在做不出来,可以临时使用)
方式二:定义三个变量,来记录数组下标;因为数组都是有序的,需要从数组末尾下标进行操作,把较大的数排在后面;定义数组A下标pa = m-1,数组B下标pb = n-1,定义k下标来存放pa与pb下标比较后较大的值 k = m+n-1;

两数组中元素比较涉及循环,循环结束有两种结果:数组A结束 或 数组B结束
– ① 数组B结束,对结果没有影响,数组A是有序的;(只有数组B中的数大于数组A中的数,才可能放入A中,所以只要是数组B结束的A中一定是有序的)
– ②数组A结束,说明数组B中还有元素,因为数组是有序的,所以需要把数组B中剩余的元素根据下标依次插入到数组A中即可;

图示起始位置:

在这里插入图片描述

循环条件控制示例图:

在这里插入图片描述

4. 代码实现

代码实现具体操作:
① 想到用三种下标实现pa,pb,k
② 找到循环条件pa >= 0 && pb >= 0
③ 比较pa与pb下标在数组中对应的元素,大的元素放在数组A中的k位置;(比较完记得下标移动,谁数大,谁下标-1)
④ 单独处理数组A先走完,数组B中还有剩余的情况

public void merge(int A[], int m, int B[], int n) {
        int pa = m - 1;
        int pb = n - 1;
        int k = m + n - 1;
        while (pa >= 0 && pb >= 0) {
            if(A[pa] < B[pb]) {//数组B中的元素大,就讲B的元素放到数组A中的k位置
                A[k] = B[pb];
                pb--;//数组B下标-1
                k--;//k位置-1
            } else {
                A[k] = A[pa];
                pa--;//数组A下标-1
                k--;//k位置-1
            }
        }
        //处理数组A先走完,数组B中还有剩余的情况
        while(pb >= 0) {
            A[k] = B[pb];
            pb--;
            k--;
        }
    }

总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用 Python 将 html 转为 pdf、word

在日常中有时需将 html 文件转换为 pdf、word 文件。网上免费的大多数不支持多个文件转换的情况&#xff0c;而且在转换几个后就开始收费了。 转 pdf 转 pdf 中使用 pdfkit 库&#xff0c;它可以让 web 网页直接转为 pdf 文件&#xff0c;多个 url 可以合并成一个文件。 安装…

供应科研试剂Biotin-PEG-Thiol,Biotin-PEG-SH,生物素peg巯基

一&#xff1a;产品描述 1、名称 英文&#xff1a;Biotin-PEG-Thiol&#xff0c;Biotin-PEG-SH 中文&#xff1a;生物素-聚乙二醇-巯基 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Biotin PEG Thiol PEG 4、分子量&#xff1a;可定制&#xff0c;1k、2k、3.4k、1…

linux red hat 8.0 搭建httpd服务

简介&#xff1a; Apache HTTP Server&#xff08;简称Apache&#xff09;&#xff0c;是Apache软件基金会的一个开源的网页服务器&#xff0c;可以在大多数电脑操作系统中运行&#xff0c;由于其具有的跨平台性和安全性&#xff0c;被广泛使用&#xff0c;是最流行的Web服务器…

Altium Designer输出GERBER文件与华秋DFM对比

Altium Designer是原Protel软件开发商Altium公司推出的PCB设计软件。Altium Designer &#xff08;AD&#xff09;软件一款功能强大、界面友好、操作简单、易容上手等优点&#xff0c;&#xff0c;因此成为各电子工程师、PCB设计工程师、电子发烧友首选EDA设计工具。掌握AD软件…

【简单项目实战】用C++实现通讯录管理系统 | [普通实现]

目录 ●功能介绍 ●案例 ●代码展示 ●结果展示 ●功能介绍 用C设计一个程序&#xff0c;能够提供以下功能&#xff1a; 1.录入联系人的基本信息。包括姓名、性别、年龄、电话号和地址。 2.展示所有已录入联系人的基本信息。以姓名、性别、年龄、电话号和地址的方式按列…

链表的实际应用

1. 删除链表中等于给定值 val 的所有节点。 链接&#xff1a;203. 移除链表元素 - 力扣&#xff08;Leetcode&#xff09; 假设&#xff1a;我们有这么个链表&#xff1a; 我们需要删除所有date域为key的结点。 假设key为4&#xff1a; 思路&#xff08;快慢指针&#xff09…

54、反射(reflection)

一、入门 反射机制的重要性在于&#xff1a;通过外部文件配置&#xff0c;在不修改源码情况下来控制程序&#xff0c;也符合设计模式的ocp原则&#xff08;开闭原则&#xff1a;不修改源码&#xff0c;扩容功能&#xff09; package hspedu.reflection_question;import hsped…

你知道的都不对!Python应该这样学

你们所说的什么要怎样数据分析、爬虫、Web 等&#xff0c;在我看来那不是精通 Python&#xff0c;而是精通某一领域&#xff0c;抛开 Python 换用另一门语言也可&#xff0c;在我看来&#xff0c;精通 Python 语言大约需要如下这些步骤&#xff08;你有你的学习方法&#xff09…

SpringBoot-TwoDay

thymeleaf常用配置 server:port: 8096 spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3305/mybatis?useSSlfalseusername: rootpassword: rootthymeleaf:cache: false# 降低代码审查的严格度mode: LEGACYHTML5# 配置了前缀pref…

jsp+ssm计算机毕业设计宠物商店管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

Docker笔记--搭建私有仓库、上传镜像、拉取镜像

目录 1--搭建私有仓库 2--将镜像上传到私有仓库 3--从私有仓库拉取镜像 4--补充测试 1--搭建私有仓库 ① 拉取私有仓库镜像 docker pull registry ② 启动私有仓库容器 docker run -id --nameregistry_test -p 5000:5000 registry ③ 打开浏览器&#xff0c;输入以下地址…

网络编程套接字 -- TCP/UDP

网络编程套接字 -- TCP/UDP一、网络编程1.1 什么是网络编程1.2 网络编程中的基本概念1.3 TCP和UDP二、UDP数据报套接字编程2.1 DatagramSocket API2.2 DatagramPacket API2.3 InetSocketAddress API2.4 回显程序 (UDP)2.5 翻译程序 (UDP)三、TCP流套接字编程3.1 ServerSocket A…

考研数学模拟卷经典题总结

考研数学模拟卷经典题总结1、李林四套卷的题目&#xff1a; 【23考研数学】李林老师四套卷两道二重积分计算题目分享——利用雅可比变换大大减少计算量与利用轮换对称性解题_哔哩哔哩_bilibili 上面两道题目都可以采用轮换对称性来做&#xff0c;第一道题目也可以使用雅可比行…

Java超市系统超市自提超市多商家系统源码超市自提网站

简介 Ssm多商家超市自提系统。用户注册申请开店成为商家&#xff0c;普通注册用户下单时选择离自己较近的自提点次日取货。管理员进行店铺审核、用户、分类管理等。 演示视频 https://www.bilibili.com/video/BV1hg411E77q/?share_sourcecopy_web&vd_sourceed0f04fbb7131…

Java老鸟5年压箱底面试真题资料+自学手册,秋招拿下阿里45k offer

背景 又逢“金三银四”&#xff0c;年轻的毕业生们满怀希望与忐忑&#xff0c;去寻找、竞争一个工作机会。已经在职的开发同学&#xff0c;也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。然而&#xff0c;面试人群众多&#xff0c;技术市场却相对冷淡&#xf…

轻量日志收集系统loki

1.Loki简介 Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展&#xff0c;高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益&#xff0c;并且易于操作。使用标签来作为索引&#xff0c;而不是对全文进行检索&#xff0c;也就是说&a…

基于帝国主义竞争算法(ICA)求解旅行商问题(TSP)(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维…

如何用Python破解邻居家的WIFI?

Hallo&#xff0c;各位小伙伴们大家好&#xff0c;这篇文章我们来干一件大事&#xff0c;如标题所示——用Python破解邻居家的WiFi。这是偶然间在码云上看到的一个项目&#xff0c;感觉蛮有趣的&#xff0c;分享给大家。文中用到的语料库和源码博主也会在文章最后贴给大家&…

Nginx教程(2)

文章目录2.1 Nginx解决跨域问题2.2 Nginx解决静态资源防盗链问题2.3 Nginx的模块化体系2.4 Nginx集群负载均衡2.5 四层负载均衡和七层负载均衡2.6 使用Nginx构建Tomcat集群2.1 Nginx解决跨域问题 所谓的跨域问题是指&#xff0c;比如我们现在我们访问域名www.imooc.com&#xf…

Linux从入门到进阶学习(Ⅳ):Linux实用操作

目录 1 实用技巧 2 软件安装 2.1 CentOs系统 2.2 Ubuntu系统 3 systemctl控制软件 4 软链接 5 日期和时区 5.1 查看日期 5.2 修改时区 5.3 时间校准 6 IP地址和主机名 6.1 IP地址与主机名 6.2 域名解析 7 固定IP地址 8 网络请求和下载 8.1 ping 8.2 wget 8.3…