LeetCode.1051-身高检查器(Height Checker)

移动应用畅销榜预测数据集10000款应用19特征 本数据集模拟移动应用商店的运营特征,包含10000款应用、19个字段、单CSV约937KB。字段覆盖应用类别(12类)、商业模式(免费、广告、内购、订阅、付费)、发布年份、内容分级、安装包大小、单次会话广告加载量、年更新次数、距上次更新天数、商店编辑推荐、买量支出、平均评分、次日与30日留存率,以及评分总数、累计下载量与营收等结果字段。提供top_grossing分类目标(营收前15%)与revenue_musd回归目标,结果字段独立分离,便于练习避免目标泄漏。数据完整无缺失、无需表关联,非线性效应与特征交互明显,调优后模型可超越朴素基线,兼具入门友好与研究深度,适合移动应用行业分析、商业化策略研究与机器学习教学。说明:本数据为Python生成的合成数据,仅反映生成规则,不含真实应用与个人信息。许可:CC0公有领域,可自由使用与二次分发。 立即下载

这是小川的第390次更新,第420篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第252题(顺位题号是1051)。要求学生按身高递增的顺序站列来拍年度照片。

返回没有站在正确位置的学生人数。(这是必须移动的学生人数,以便所有学生身高能够以递增的顺序排列。)

例如:

输入:[1,1,4,2,1,3]
输出:3
说明:身高4,3和最后身高1的学生没有站在正确的位置。

注意:

  • 1 <= heights.length <= 100

  • 1 <= heights[i] <= 100

02 第一种解法

题目很简单,找出没有按高度增序站的学生人数即可。

思路:将原数组的值复制一份出来,将其排序,使用Arrays类的sort方法完成,再与原数组对应位置的元素比较,值不相等就加1,最后返回总人数。

时间复杂度为O(N log(N)),空间复杂度为O(N)。

public int heightChecker(int[] heights) {
    int count = 0, n = heights.length;
    int[] copy = Arrays.copyOf(heights, n);
    Arrays.sort(copy);
    for (int i=0; i<n; i++) {
        if (heights[i] != copy[i]) {
            count++;
        }
    }
    return count;
}

03 第二种解法

还记得前几天详细介绍过的计数排序吗?此题就可以用上,此解法是简单版实现。

时间复杂度为O(N),空间复杂度为O(N)。

public int heightChecker2(int[] heights) {
    int[] count = new int[101];
    for (int num : heights) {
        count[num]++;
    }
    int n = heights.length, index = 0;
    int[] result = new int[n];
    for (int i=0; i<count.length; i++) {
        while (count[i] > 0) {
            result[index++] = i;
            count[i]--;
        }
    }
    int times = 0;
    for (int i=0; i<n; i++) {
        if (heights[i] != result[i]) {
            times++;
        }
    }
    return times;
}

04 第三种解法

进阶版的计数排序算法实现。

时间复杂度为O(N),空间复杂度为O(N)。

public int heightChecker3(int[] heights) {
    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE;
    for (int num : heights) {
        min = Math.min(min, num);
        max = Math.max(num, max);
    }
    int[] count = new int[max-min+1+1];
    for (int num : heights) {
        count[num-min+1]++;
    }
    for (int i=1; i<count.length; i++) {
        count[i] += count[i-1];
    }
    int n = heights.length;
    int[] result = new int[n]; 
    for (int j=0; j<n; j++) {
        result[count[heights[j]-min]++] = heights[j];
    }
    int times = 0;
    for (int i=0; i<n; i++) {
        if (heights[i] != result[i]) {
            times++;
        }
    }
    return times;
}

05 第四种解法

针对简版的计数排序算法,我们还可以再简化下,在将排序后的元素填充到新数组时,顺便与原数组的对应元素进行比较,省掉后面单独再开一个for循环来比较。

时间复杂度为O(N),空间复杂度为O(N)。

public int heightChecker4(int[] heights) {
    int[] count = new int[101];
    for (int num : heights) {
        count[num]++;
    }
    int n = heights.length, index = 0;
    int times = 0;
    int[] result = new int[n];
    for (int i=0; i<count.length; i++) {
        while (count[i] > 0) {
            result[index] = i;
            if (heights[index] != result[index]) {
                times++;
            }
            index++;
            count[i]--;
        }
    }
    return times;
}

06 小结

算法专题目前已连续日更超过七个月,算法题文章258+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

预算约束下的备件库存:MATLAB中的边际分配与动态规划,最小化预期欠单.rar 立即下载

相关推荐

对外一种类型,对内几副身形:Redis键空间管理、五大类型内部编码与场景选型解析代码包

想解决的就是这道“会用”和“用好”之间的缝隙。它回答四个具体问题: 一个 Redis 实例应该怎样启动、连接和关闭,哪些做法会在重启后丢数据; 管理键的那一组命令(EXISTS、DEL、EXPIRE、RENAME、KEYS、SCAN……)各自的代价是什么,哪些会把主线程卡住; 对外只有五种类型,对内却有十来种编码,它们何时切换、为何切换、切换后内存差多少; 每种类型最适合什么访问模式,常见场景(缓存、计数、限流、队列、标签、排行榜、延迟队列、分页)应该怎样写才不踩坑。

历届试题 小朋友排队

问题描述  n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。  每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。  如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。  请问,要让所有小朋友...

weixin_30535167的博客 989

新出的智谱GLM-4.7很牛逼?

Zhipu AI(智谱)最近发布的 GLM-4.7 再次刷新了开源大模型的天花板。作为一款约 400B 参数规模的 MoE 模型,它不仅在传统的代码与推理任务上超越了 DeepSeek-V3.2 和 Kimi-K2 等强力对手,更通过**“保留思考(Preserved Thinking)”和“交错思考(Interleaved Thinking)”**等架构级创新,重新定义了 Agentic Workflow 的设计范式。

kakaZhui的博客 2402

leetcode-406. 根据身高重建队列

目录 题目 运行时间 代码 题目 假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。 注意: 总人数少于1100人。 示例 输入: [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 输出: [[5,0], [7,0], [5,...

Flower的博客 709

当我们谈论Unidbg时我们在谈什么

文章目录一、前言二、使用Unidbg的工作量是什么三、补环境补的是什么3.1 运行环境缺失3.2 上下文缺失四、Unidbg 不是所有情况下最优的解决方案五、Unidbg在大多数情况下是好的方案六、Unidbg和风控无关七、尾声 一、前言 这是一篇漫谈Unidbg的文章,我对Unidbg的使用和理解都还很浅,日后会更新或修改看法,欢迎大佬指点,也期待同侪讨论。 二、使用Unidbg的工作量是什么 我们常规使用Frida + IDA的动静态分析中,工作可能是这样的 找线索→Frida Hook验证→验证成功继

lilac的博客 5789

嵌入式八股文-ARM

嵌入式八股文总结(ARM篇)-优快云博客现象:I2C死锁就是时钟线SCL一直处于高电平,数据线SDA一直处于低电平。从机拉低数据线SDA时(发送应答信号给主机时或发送数据0时)主机意外复位,主机复位后时钟线SCL就为高电平了,此时,SCL为高电平而SDA为低电平,主机就以为有其他设备占有了总线,而SCL为高电平时 数据位SDA不允许有变化,意思是:主机就一直等待时钟线SDA拉高,而从机就一直等待时钟线SCL拉高 就造成了死锁的现象。解决方法:1.选择带有复位功能的从设备,复位后SDA被拉高。

m0_63127436的博客 1263

【leetcode】根据身高重建队列

题目要求 根据身高重建队列 假设有打乱顺序的一群人战成一个队列,每个人由一个整数对(h,k)表示, 其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。(总人数少于1100人) 核心思路 二维数组,利用ArrayList来进行遍历。 完整代码如下 import java.util.ArrayList; import java.util.Arrays;...

学习记录分享 3514

MAX96712在车载摄像头系统中的带宽分配与传输能力计算解析

在计算摄像头带宽与传输接口的关系时,需要考虑视频流的像素分辨率、帧率、颜色深度等因素。以 MAX96712 这种 GMSL2 产品为例,它支持每个链路在正向方向以 3Gbps 或 6Gbps 的固定速率工作。

weixin_43199439的博客 3331

LeetCode题解2020/11/16 根据身高重建队列

写在前面:摸鱼将近5个月,终于回来刷题了。 题目: 假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。 思路: 1.首先考虑从高到低排列身高,在同等身高的情况下,k值越小置前,按照这个顺序重新整理队列 2.然后按照顺序依次取出(h,k),插入到位置res[k]上,这样可以保证前面至少有k个位置可以摆放比他高的,又因为我们已经按照身高(第一属性,从高到低)和K值(第二属性,从小到大

df030的博客 242

捷联惯导总结--初始对准,位置标定,INS姿态更新,GPS/INS组合

惯导及组合导航回顾  2018.09.16 今天和17系的同学一起把惯导的流程捋了一遍,为了加深自己的记忆,这里在前面把心得大致列出来。 我们这里只考虑捷联式惯导及松组合 首先拿到惯性传感器(加速度计和陀螺仪)需要对其进行标定,是为了求出零偏,比例因子,交轴耦合这些误差。这些误差有的虽然在出厂时会给出,但是考虑到实际环境不同,还是要做标定。一般采用的是六位置旋转法,针对加速度计和陀螺仪同时...

赤豆几维 5万+

Windows 11 安装 JDK 25:下载、安装、配置环境变量、验证

本文详细介绍了在 Windows 11 系统上安装 JDK 25 的完整流程,包括从 Oracle 官网下载压缩包、解压至自定义目录、配置 JAVA_HOME 与 Path 环境变量,并验证安装是否成功。文章推荐使用 ZIP 压缩包而非 EXE 安装程序,以实现绿色便携、多版本共存和灵活管理。最后通过一个使用 Java 25 新特性的示例程序,验证 JDK 的编译与运行环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 7681

LeetCode 1051. 高度检查器(Height Checker) 28

1051. 高度检查器 1051. Height Checker 题目描述 学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。 请你返回至少有多少个学生没有站在正确位置数量。该人数指的是:能让所有学生以 非递减 高度排列的必要移动人数。 每日一算法2019/5/31Day 28LeetCode1051. Height Checker 示例: 输入:[1,1,4,2,1,3] 输出:3...

weixin_30247307的博客 253

【异常】Openclaw Gateway进程异常停止问题分析与解决方案

本文分析了Gateway服务异常停止的问题,提出了三种解决方案。核心问题是缺乏进程守护和自动恢复机制,导致服务崩溃后无法自行重启。推荐方案是使用PM2进程管理工具(方案1),提供进程监控、自动重启和开机自启功能。替代方案包括自定义守护脚本(方案2)和supervisord管理(方案3)。这些方案都能有效解决当前服务脆弱性问题,显著提升服务可用性,其中PM2方案成熟度高、配置简单,是首选解决方案。实施后可将服务从人工干预转变为自动恢复,确保业务连续性。

奶爸的编程之路,也就一周冷个三天 461

LeetCode_1051_高度检查器

题目链接 https://leetcode-cn.com/problems/height-checker/ 解题思路 首先将原数组复制一份为tmp 然后对数组tmp进行排序 比较原数组和排序后的tmp每个位置的不同个数即为答案 AC代码 class Solution { public int heightChecker(int[] heights) { int ans = 0; int len = heights.length; int[] t

Fitz的博客 204

TIA博途WINCC中如何设置多语言及语言切换的具体方法

TIA博途WINCC中如何设置多语言及语言切换的具体方法

Robot_PLC_HMI_Automation 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

leetcode 1051. Height Checker 高度检查器-耗时100

Problem:耗时100%,复制,排序,比较是否相等计数。

邹九的个人博客 56

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[Swift]LeetCode1051.高度检查器 | Height Checker

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30590285的博客 91

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【leetcode_1051】【简单】height-checker / 高度检查器

qsort()

过得精彩,无所谓好坏 153

Leetcode 1051. Height Checker

文章作者:Tyan 博客:noahsnail.com  |  优快云  |  简书 1. Description 2. Solution Version 1 class Solution: def heightChecker(self, heights): count = 0 result = sorted(heights) for i in range(len(heights)): if

SnailTyan 174

LeetCode:1051. Height Checker高度检查器(C语言)

题目描述: 学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。 请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。 注意,当一组学生被选中时,他们之间可以以任何可能的方式重新排序,而未被选中的学生应该保持不动。 示例: 输入:heights = [1,1,4,2,1,3] 输出:3 解释: 当前数组:[1,1,4,2,1,3] 目标数组:[1,1,1,2,3,4] 在下标 2 处(从 0 开始计数)出现 4 vs 1 ,所以我们必须移动这名学生。 在下标 4 处(从 0 开始计数)出

C/C++攻城狮 318

【Leetcode】1051. Height Checker

题目地址: https://leetcode.com/problems/height-checker/ 给定一个数组AAA,题目保证1≤A[i]≤1001\le A[i]\le 1001≤A[i]≤100,问如果BBB是AAA升序排好的数组,有多少个iii使得A[i]≠B[i]A[i]\ne B[i]A[i]​=B[i]。 可以直接拷贝一份AAA,然后排序后直接比较。更好的做法是用计数排序。先开个长101101101的数组ccc,使得c[x]c[x]c[x]是xxx这个数在AAA中出现的次数。接着再做比较

数学、算法爱好者的博客 160

#力扣 LeetCode1051. 高度检查器 @FDDLC

题目描述: https://leetcode-cn.com/problems/height-checker/ Java代码: class Solution { public int heightChecker(int[] h) { int[] cp=h.clone(); Arrays.sort(h); int ans=0; for(int i=h.length-1;i>=0;i--)if(cp[i]!=h[i]).

LiuXingchang的博客 300

leetcode-1051. 高度检查器-C语言

int cmp(int *a, int *b){ return *a - *b; } int heightChecker(int* arr, int len){ int i; int cnt = 0; int arr2[len]; memcpy(arr2, arr, len*sizeof(int)); qsort(arr2, l...

SFFS 319

LeetCode 题解:1051. 高度检查器,JavaScript,先排序再比较,详细注释

原题链接:https://leetcode-cn.com/problems/height-checker/ 解题思路: 先明确题意,该题实际上是问,如果有一个未排序的数组,将其进行由低到高排序,前后最少需要移动多少个数字。 关键就是在于理解“最少需要移动多少个数字”,也就是说,排序前后数组的元素有多少个不同,那么最少也要移动这几个数字,才能达到排序的结果。 因此实现步骤诶,先对数组进行排序,然后将排序好的数组和原数组进行比较,统计值不同的元素个数即可。 /** * @param {number[]}

Lee Chen的博客 178

[leetcode]1051.高度检查器(Height Checker)C++代码实现

1,题目描述 2,题目分析 1,排序 2,对比 3,代码实现 class Solution { public: int heightChecker(vector<int>& heights) { int n=heights.size(); vector<int> tmp=heights; s...

博客 409
上一篇: LeetCode.1047-重复删除字符串中的所有相邻重复项
下一篇: LeetCode.1071-字符串最大公约数(Greatest Common Divisor of Strings)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值