栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Java&C++题解与拓展——leetcode1051.高度检查器【么的新知识】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java&C++题解与拓展——leetcode1051.高度检查器【么的新知识】

每日一题做题记录,参考官方和三叶的题解

目录
  • 题目要求
  • 思路一:模拟【快排】
    • Java
    • C++
    • Rust
  • 思路二:模拟【计数排序】
    • Java
    • C++
    • Rust
  • 总结

题目要求

思路一:模拟【快排】
  • 题目很简单,先根据要求排好队,其实就是递增,然后和给出的数组逐一比较计数即可。
  • 排队可以用各语言内置的排序函数,通常都是基于快排的,复杂度为 O ( log ⁡ n ) O(log n) O(logn)。
Java
class Solution {
    public int heightChecker(int[] heights) {
        int[] sortHeight = heights.clone();
        Arrays.sort(sortHeight); // 快排
        int res = 0;
        for(int i = 0; i < heights.length; i++)
            if(sortHeight[i] != heights[i])
                res++;
        return res;
    }
}
  • 时间复杂度: O ( n log ⁡ n ) O(nlog n) O(nlogn)
  • 空间复杂度: O ( log ⁡ n ) O(log n) O(logn)
C++
class Solution {
public:
    int heightChecker(vector& heights) {
        vector sortHeight = heights;
        sort(sortHeight.begin(), sortHeight.end()); // 快排
        int res = 0;
        for(int i = 0; i < heights.size(); i++)
            if(sortHeight[i] != heights[i])
                res++;
        return res;
    }
};
  • 时间复杂度: O ( n log ⁡ n ) O(nlog n) O(nlogn)
  • 空间复杂度: O ( log ⁡ n ) O(log n) O(logn)
Rust
impl Solution {
    pub fn height_checker(heights: Vec) -> i32 {
        let mut sortHeight = heights.clone();
        sortHeight.sort(); // 快排
        sortHeight.iter().enumerate().fold(0, |acc, (i, &num)|
            if num != heights[i] { acc + 1 }
            else { acc })
    }
}
  • 时间复杂度: O ( n log ⁡ n ) O(nlog n) O(nlogn)
  • 空间复杂度: O ( log ⁡ n ) O(log n) O(logn)
思路二:模拟【计数排序】
  • 用计数排序,因为数据范围小,就直接用一个数组记录每个数出现的频次依次放入排序结果。
Java
class Solution {
    public int heightChecker(int[] heights) {
        int[] cnts = new int[110]; // 数据范围100
        for(int h : heights)
            cnts[h]++;
        int n = heights.length, res = 0;
        int[] sortHeight = new int[n];
        for(int i = 1, j = 0; i < 110; i++)
            while(cnts[i]-- > 0)
                sortHeight[j++] = i;
        for(int i = 0; i < n; i++)
            if(sortHeight[i] != heights[i])
                res++;
        return res;
    }
}
  • 时间复杂度: O ( n + C ) O(n + C) O(n+C)
  • 空间复杂度: O ( log ⁡ n ) O(log n) O(logn)
C++
class Solution {
public:
    int heightChecker(vector& heights) {
        int cnts[110]; // 数据范围100
        memset(cnts, 0, sizeof(cnts));
        for(auto h : heights)
            cnts[h]++;
        int n = heights.size(), res = 0;
        int sortHeight[n];
        for(int i = 1, j = 0; i < 110; i++)
            while(cnts[i]-- > 0)
                sortHeight[j++] = i;
        for(int i = 0; i < n; i++)
            if(sortHeight[i] != heights[i])
                res++;
        return res;
    }
};
  • 时间复杂度: O ( n + C ) O(n + C) O(n+C)
  • 空间复杂度: O ( log ⁡ n ) O(log n) O(logn)
Rust

因为integer、i32以及一些其他类型的不熟悉,导致索引有点问题,所以暂时略过了。

总结

简单模拟题、还契合了一下毕业季的氛围,复习一下各语言排序函数的使用方法~

假期Rust学习计划之数据类型入库。


欢迎指正与讨论!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号