「LeetCode」1051-高度检查器

107 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

一.题目:

1051. 高度检查器 学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。

排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。

给你一个整数数组 heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。

返回满足 heights[i] != expected[i] 的 下标数量 。

示例:

输入:heights = [1,1,4,2,1,3]
输出:3 
解释:
高度:[1,1,4,2,1,3]
预期:[1,1,1,2,3,4]
下标 2 、4 、5 处的学生高度不匹配。

示例 2:

输入:heights = [5,1,2,3,4]
输出:5
解释:
高度:[5,1,2,3,4]
预期:[1,2,3,4,5]
所有下标的对应学生高度都不匹配。

示例 3:

输入: heights = [1,2,3,4,5]
输出: 0
解释:
高度:[1,2,3,4,5]
预期:[1,2,3,4,5]
所有下标的对应学生高度都匹配。

提示:

  • 1 <= heights.length <= 100
  • 1 <= heights[i] <= 100

二、思路分析:

首先还是需要仔细地审题,因为题目中的文字可能过长导致我们不能够明白题目的意思,其实我们只需要抓住题目的重点我们就能够完全地明白题目的意图。学生按照非递减的高度顺序说明要求我们给定的数字顺序是单调递增的,随后expected[i]heights[i]进行比较说明我们需要对排序后的数组和之前的数组进行一一比较得出来的结果就是题目想要的答案。基本步骤为:

  • 首先需要对原始的数组进行拷贝,即通过某种方法赋值数组。
  • 对原始数组进行排序,排序完成后在对之前拷贝的数组进行比较,每有一个地方不同的话就把结果count+1知道遍历完成。

三、代码:

function heightChecker(heights: number[]): number {
    const newArr = JSON.parse(JSON.stringify(heights));
    heights.sort((a,b) => a-b);
    let count = 0;
    for(let i=0 ; i< heights.length ; i++){
        if(heights[i] !== newArr[i]){
            count++;
        }
    }
    return count;
};

四、总结:

有的题目的文字通常是用来迷惑我们的,因为通常关键点只在一两句话上面,所以我们就需要有能够提取关键信息的能力,像这道题无非就是排序加拷贝加遍历的操作。