博客
关于我
高度检查器
阅读量: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/

    你可能感兴趣的文章
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>