博客
关于我
高度检查器
阅读量:789 次
发布时间:2019-03-25

本文共 898 字,大约阅读时间需要 2 分钟。

技术人员通常会根据实际需求和具体情况来决定解决方案,但以下是一些通用的考虑因素和可能的实现思路:

  • 问题分析:首先,我们需要理解题目要求,就是找到一种方法,让学生可以通过每组之间的重新排序达到非递减身高的目标排序状态。关键点在于“最小必要移动人数”,也就是尽可能少地通过调整相邻的学生来使得整个队列满足条件。

  • 直观理解:考虑到题目中提到“非递减”,这其实意味着我们需要将学生的身高排列成一个递增序列。每个学生只能占据一个位置,而各个学生之间可以通过交换位置来改变他们的相对位置。

  • 基本思路:最直接的方法应该是先对原始队列进行排序,然后将排序后的队列进行与原始队列的对比。经对比,可以找出那些在原始队列和排序队列之间不匹配的位置。这些位置的学生必须移动,因为他们不符合最终目标排列要求。

  • 一个简单例子:比如输入是 [1,1,4,2,1,3],排序后的结果是 [1,1,1,2,3,4]。我们可以看到,位置2、4、5分别对应原数组中的4、3、6(需要注意从0开始计数)。这时候我们发现,排序后与原数组对比,出发了不同位置的学生数量为3,所以返回3就是符合题意的结果。

  • 边界条件的处理:对于一些特殊的输入,比如已经是非递减顺序排列的数组,如[1,2,3,4,5],排序后的数组和原数组是一样的,返回0是符合期望的。但是,对于像[5,1,2,3,4]这样的数组,显然需要全部5名学生都移动,才能符合目标排列。

  • 算法实现:具体到编程实现,可以考虑以下步骤:

    • 1、将输入数组复制到一个新数组中。
    • 2、对新数组进行排序。
    • 3、遍历原始数组和排序后的数组,比较对应位置的元素。
    • 4、每发现一个不同就计数器加一。
    • 5、最终返回计数器的值。
  • 优化思路:这种方法的计算复杂度是O(n)的,因为排序的时间是O(n log n),但这通常是可接受的,因为n的范围在题目中并没有明确的限制,但假设n的规模不会过大。需要注意的是,这种方法的准确性依赖于是否可以完全恢复排序后的数组,而无需考虑原有位置的影响。

  • 综上所述,最直接也是最有效的方法就是比较原始数组和排序后的数组,找出不匹配的位置,统计其数量,即为需要的最小移动人数。

    转载地址:http://zlcuk.baihongyu.com/

    你可能感兴趣的文章
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
    查看>>
    MySQL 错误
    查看>>
    mysql 随机数 rand使用
    查看>>
    MySQL 面试题汇总
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    MySQL 高性能优化规范建议
    查看>>
    mysql 默认事务隔离级别下锁分析
    查看>>
    Mysql--逻辑架构
    查看>>
    MySql-2019-4-21-复习
    查看>>
    mysql-5.6.17-win32免安装版配置
    查看>>
    mysql-5.7.18安装
    查看>>
    MySQL-Buffer的应用
    查看>>
    mysql-cluster 安装篇(1)---简介
    查看>>
    mysql-connector-java.jar乱码,最新版mysql-connector-java-8.0.15.jar,如何愉快的进行JDBC操作...
    查看>>
    mysql-connector-java各种版本下载地址
    查看>>
    mysql-EXPLAIN
    查看>>
    MySQL-Explain的详解
    查看>>