重生之不爱写代码才改行做产品的我竟然还在写代码

寻找身高相近的小朋友

在这里插入图片描述

在这里插入图片描述

算法实现思路

  1. 输入数据
    • main 方法中,通过 Scanner 类从标准输入(通常是键盘)读取两个整数 h 和 n。
    • h 表示目标高度,n 表示接下来要输入的高度数组的元素个数。
    • 使用循环读取 n 个整数,并将它们存储在 Integer 数组 heights 中。
  2. 排序算法
    • getResult 方法负责根据给定的目标高度 h 对 heights 数组进行排序。
    • 使用 Arrays.sort 方法对数组进行排序,并传入一个自定义的比较器(Lambda 表达式)。
    • 比较器首先计算每个高度值与目标高度 h 的绝对差值 absA 和 absB。
    • 如果两个绝对差值不相等,则根据差值的大小进行排序(差值越小,排序越靠前)。
    • 如果两个绝对差值相等,则按照原数组中的顺序(即自然顺序)进行排序,这里使用 a - b 来确保升序排序。
  3. 结果输出
    • 排序完成后,使用 StringJoiner 类将排序后的高度值拼接成一个由空格分隔的字符串。
    • 返回这个字符串,并在 main 方法中打印出来。

使用到的算法思想

  • 排序算法:本程序使用了自定义排序算法,具体是通过 Arrays.sort 方法和一个比较器实现的。比较器根据每个元素与目标值 h 的绝对差值以及元素之间的自然顺序进行排序。
  • Lambda 表达式:在 Arrays.sort 方法中,使用了 Lambda 表达式来定义比较器,这是一种简洁的函数式编程风格。

数据结构设计

  • 数组:使用 Integer 数组 heights 来存储输入的多个高度值。数组是一种线性数据结构,适合存储固定大小的同类型数据。
  • Scanner:Scanner 类用于从标准输入读取数据。它提供了一种便捷的方式来读取各种基本类型和字符串。
  • StringJoiner:StringJoiner 类用于构建一系列由特定分隔符(这里是空格)连接的字符串。它提供了简洁的方法来添加和合并字符串,避免了手动拼接字符串时可能出现的性能问题。
  1. 输入处理:程序首先处理输入,读取目标高度 h 和高度数组的元素个数 n,然后读取 n 个高度值并存储在数组中。
  2. 排序策略:定义了一个自定义排序策略,即先按与目标高度的绝对差值排序,差值相等时再按自然顺序排序。
  3. 比较器实现:使用 Lambda 表达式实现了一个比较器,该比较器遵循上述排序策略。
  4. 排序执行:调用 Arrays.sort 方法对数组进行排序,传入自定义的比较器作为参数。
  5. 结果构建:使用 StringJoiner 类将排序后的数组元素转换为一个由空格分隔的字符串。
  6. 结果输出:将构建好的字符串返回并在 main 方法中打印到控制台。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值