华为OD机试真题 Java 实现【高矮个子排队】【2023Q2 100分】,附详细解题思路

在这里插入图片描述

一、题目描述

现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。

我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或者相等;每一个“矮”位置的小朋友要比相邻的位置矮或者相等;

要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。

例如,在示范小队{5,3,1,2,3}中,{5, 1, 3, 2, 3}是排序结果。{5, 2, 3, 1, 3} 虽然也满足“高”“矮”“高”“矮”顺序排列,但小朋友们的移动距离大,所以不是最优结果。

移动距离的定义如下所示:

第二位小朋友移到第三位小朋友后面,移动距离为1,若移动到第四位小朋友后面,移动距离为2;

二、输入描述

排序前的小朋友,以英文空格的正整数:

4 3 5 7 8

注:小朋友<100个

三、输出描述

排序后的小朋友,以英文空格分割的正整数:

4 3 7 5 8

四、解题思路

题目要求将小朋友按照“高”“矮”“高”“矮”的顺序排列,并使得小朋友们的移动距离最小。

我们可以使用交换元素的方式来实现排序,同时记录交换的次数,即移动距离。

具体步骤如下:

  1. 读取输入的字符串,使用空格分割得到一个字符串数组;
  2. 将字符串数组转换为整型数组arr;
  3. 初始化变量i为0,表示当前位置;
  4. 使用while循环,判断是否可以进行交换,即判断i+1是否小于数组长度;
  5. 在循环内部,根据当前位置的奇偶性进行交换判断。
    • 如果i是奇数,则当前位置为“矮”位,即小朋友的身高应小于或等于下一个位置的小朋友身高。如果不满足条件,交换两个位置的小朋友,并增加移动距离。
    • 如果i是偶数,则当前位置为“高”位,即小朋友的身高应大于或等于下一个位置的小朋友身高。如果不满足条件,交换两个位置的小朋友,并增加移动距离。
  6. 每次循环结束后,将i增加1,继续下一轮的判断;
  7. 循环结束后,输出排列后的整型数组arr,每个数字之间用空格分割。

该算法采用了一种贪心的思路,通过遍历数组,根据当前位置的奇偶性进行交换判断,以满足“高”“矮”“高”“矮”的顺序排列。

算法在每次交换时记录了移动距离,即交换的次数,最终输出移动距离最小的排序结果。

算法的时间复杂度为O(n),其中n为小朋友的个数。在每次循环中,只进行了常数次的比较和交换操作。

五、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();String[] strs = input.split(" ");int[] arr = new int[strs.length];for (int i = 0; i < strs.length; i++) {arr[i] = Integer.parseInt(strs[i]);}int i = 0;while (i +1 < arr.length){//原则奇数位大 偶数位小if ((i+1) % 2 == 0){//1算奇数位 i要小if (arr[i] > arr[i+1]){int tem = arr[i+1];arr[i +1] = arr[i];arr[i] = tem;}}else {//0算奇数位 i要大if (arr[i] < arr[i+1]){int tem = arr[i+1];arr[i +1] = arr[i];arr[i] = tem;}}i++;}for (int j = 0; j < arr.length; j++) {System.out.print(arr[j]+" ");}
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

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

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

相关文章

python 社区发现算法

转载&#xff1a;这个Python库超级棒啊&#xff0c;包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法&#xff0c;还具有可视化功能_11205354的技术博客_51CTO博客 熟知社区发现算法&#xff0c;你不能错过这个 Python 库。它涵盖 Louvain 算法、Girvan-Newman 算法等…

AI版女网红“半藏森林”上线,服务项目让人意想不到

目前首批网红明星“AI克隆人”已提前上线&#xff0c;主营业务就是打造各种名人版AI聊天机器人&#xff0c;用户付费便可与之聊天。其后台报名参加AI克隆人的网红明星“全网粉丝总数已超过5亿”。该公司这波上线的网红明星AI克隆人&#xff0c;包括此前因“疑似插足他人恋情”&…

SSD源码总结

一、生成默认框 默认框的宽高 默认框的宽高是相对于原图的尺寸计算出来的。 默认框的中心 默认框的中心是相对于特征图的尺寸计算出来的。 二、将真实框分配给默认框 1、区分正负样本 1.1、选取正样本 计算真实框&#xff08;bboxs&#xff09;与每个默认框&#xff08;…

组合数学第五讲

Catalan numbers&#xff08;卡特兰数&#xff09; 先通过平衡括号引入卡特兰数序列的概念 1,2,5,14&#xff0c;...&#xff0c;这些数构成了卡特兰数序列&#xff0c;分别代表一共有i个括号时&#xff0c;括号排列构成的合法方案数【从左到右如果所有括号都能依次配对即是合…

Niagara—— Texture Sample 与 Particle Subuv 区别

一&#xff0c;Texture Sample 此节点是最基本的采样节点&#xff0c;依据UV坐标来采样Texture&#xff1b; MipValueMode&#xff0c;设置采样的Mipmap Level&#xff1b; None&#xff0c;根据当前Texture大小和物理缩放&#xff0c;自动选择合适的 Mipmap Level &#xff1b…

将数组中的每一位元素依次循环向后移一位

#include<iostream> using namespace std; int main() {int a[10],i,t,k;for(i0;i<10;i){cin>>a[i];}ka[9];for(i9;i>0;i--){ta[i];a[i]a[i-1];a[i-1]t;}a[0]k;for(i0;i<10;i){cout<<a[i]<<" ";}cout<<endl;return 0; }

定义一个函数,统计具有n个元素的一维数组中大于等于所有元素平均值的元素的个数并返回这个值

#include<iostream> using namespace std; int Count(double a[6],int n) {int average,i,s0,k0;for(i0;i<n;i){ssa[i];}averages/n;for(i0;i<n;i){if(a[i]>average)k;}return k; } int main() {int i,k,n;cout<<"请输入数组的大小n:"<<e…

(附源码)springboot自行车在线租赁管理系统 毕业设计101157

Springboot自行车在线租赁系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对自行车租赁等…

240:vue+openlayers上传CSV文件,在地图上显示信息

第240个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers上传CSV文件,在地图显示,点击点后,显示点信息。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果使用的csv…

阿啊-有意思的表情包

阿啊&#xff0c;英文名为Ah-Ah&#xff0c;诞生于2019年8月&#xff0c;是一只角度固定、不知是啥的二维生物(也可能不是生物)。准确的来说&#xff0c;这是一个系列表情包&#xff0c;从官网上可以下载&#xff0c;目前已经推出了好几个版本。当然&#xff0c;还支持在线制作…

如何制作搞笑表情包

表情包已经成为我们生活聊天中必不可少的一部分&#xff0c;但是如何制作搞笑表情包呢&#xff1f;自己制作的表情包更加独有个性&#xff0c;今天小编带大家看一波原创表情包的制作方法吧&#xff01;使用工具&#xff1a;电脑操作方法&#xff1a;1、首先在手机上也是可以制作…

红包表情包封面怎么制作,沙雕表情包怎么制作,送你行走的表情包

对于很多小伙伴来说&#xff0c;可能制作一个红包封面还是有一定难度的&#xff0c;不过发红包是可以插入表情包的&#xff0c;我想表情包大家都有吧。 没有怎么办呢&#xff1f;那就动手制作呗&#xff01; 如果你是个设计高手完全就不在话下&#xff0c;完全可以设计出自己…

如何用python绘制一系列三维的逗比风格表情包

如果你也想赚钱&#xff0c;实现财务自由&#xff0c;但接触不到优质的人脉和资源&#xff0c;可以到公June浩&#xff1a;成长home&#xff0c;发"资源" &#xff0c;就会看到我吐血整理的168条保姆级零基础吸金秘籍&#xff0c;跟着我一起亲历毕业5年、创业3年、从…

My Note of Diffusion Models

Diffusion Models Links: https://theaisummer.com/diffusion-models/ Markovian Hierachical VAE rvs: data: x 0 x_{0} x0​,representation: x T x_{T} xT​ ( p ( x 0 , x 1 , ⋯ , x T ) , q ( x 1 , ⋯ , x T ∣ x 0 ) ) (p(x_0,x_1,\cdots,x_T),q(x_1,\cdots,x_{T…

如何在html中插入表情包,怎么把表情包插入word

是下表情包已经成为一种流行&#xff0c;在word文档中&#xff0c;添加表情包&#xff0c;会给人一种生动亲切的感觉。那么如何在word中添加表情包呢&#xff1f;下面就来看看小编的方法吧。 表情包有很多种形式&#xff0c;例如动态表情&#xff0c;表情符号&#xff0c;静态图…

Github emoji 表情包大全

传送门&#xff1a;https://www.jianshu.com/p/72a4214764e4 https://www.webpagefx.com/tools/emoji-cheat-sheet/

深度学习了40万个表情,一大波AI 表情包来了

自从有了表情包&#xff0c;跟人聊天时的第一反应&#xff0c;就是去找找看有什么适合的表情。 有一类表情包&#xff0c;形式是文字图&#xff0c;尤其能够精妙地抒发和传递感情。 在这一点上&#xff0c;可能全世界的网友都一样。 好用的表情永远不嫌多&#xff0c;而且似乎总…

进击的巨人有趣表情包

image 下载地址: 进击的巨人_BQB/进击的巨人00001-戴拿.gif image 下载地址: 进击的巨人_BQB/进击的巨人00002-莱纳你坐呀.gif image 下载地址: 进击的巨人_BQB/进击的巨人00003-逐渐变得精彩起来了.jpg image 下载地址: 进击的巨人_BQB/进击的巨人00004-醉酒的等级-尤弥尔希斯…

深度学习的分割方法

FCN&#xff1a;基于深度学习的语义分割模型 语义分割的定义&#xff1a;对像素进行精细化的分类。 用深度学习来解决语义分割&#xff0c;所面临的主要问题是&#xff1a; 早期的深度模型用于分类&#xff0c;输出一维向量&#xff0c;无法分割 深度模型不够精细 动机 如…

中国人民大学与加拿大女王大学金融硕士——人生选对方向很重要

有人说&#xff0c;人生最重要的不是财富、不是荣誉&#xff0c;而是选择一条正确的道路。选择正确的方向&#xff0c;对一个人的成长和事业的成功与否&#xff0c;起着决定作用。有了方向&#xff0c;你前进的每一步都跟接近幸福。在职计划读研的你有了解过中国人民大学与加拿…