算法leetcode1051. 高度检查器(rust和go)

Posted 二当家的白帽子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode1051. 高度检查器(rust和go)相关的知识,希望对你有一定的参考价值。


文章目录


1051. 高度检查器:

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

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

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

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

样例 1:

输入:
	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

分析

  • 面对这道算法题目,二当家的陷入了沉思。
  • 翻译一下题意就是按照非递减顺序排序后,有多少个位置上的高度和排序前不一样。
  • 直接拷贝一份高度数据,然后排序,接着遍历比较计数即可,这是最容易想到的方式。
  • 事实上,我们也可以对高度计数,知道每个高度有几个人之后,我们自然知道顺序。

题解

rust

impl Solution 
    pub fn height_checker(heights: Vec<i32>) -> i32 
        let mut cpy = heights.clone();
        cpy.sort();

        (0..heights.len()).filter(|&i| 
            heights[i] != cpy[i]
        ).count() as i32
    


go

func heightChecker(heights []int) int 
    cpy := append([]int, heights...)
	sort.Ints(cpy)

	ans := 0
	for i, h := range heights 
		if h != cpy[i] 
			ans++
		
	

	return ans


typescript

function heightChecker(heights: number[]): number 
    const cpy = heights.slice().sort((a, b) => a - b);
	return heights.filter((h, i) => h != cpy[i]).length;
;

python

class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        cpy = sorted(heights)
        ans = 0
        for i, h in enumerate(heights):
            if h != cpy[i]:
                ans += 1
        return ans


c

static inline cmp(const void *a, const void *b) 
    return *(int *) a - *(int *) b;


int heightChecker(int* heights, int heightsSize)
    int *cpy = (int *) malloc(sizeof(int) * heightsSize);
    memcpy(cpy, heights, sizeof(int) * heightsSize);
    qsort(cpy, heightsSize, sizeof(int), cmp);
    int ans = 0;
    for (int i = 0; i < heightsSize; ++i) 
        if (heights[i] != cpy[i]) 
            ++ans;
        
    
    return ans;


c++

class Solution 
public:
    int heightChecker(vector<int>& heights) 
        vector<int> cpy(heights);
        sort(cpy.begin(), cpy.end());
        int ans = 0;
        for (int i = 0; i < heights.size(); ++i) 
            if (heights[i] != cpy[i]) 
                ++ans;
            
        
        return ans;
    
;

java

class Solution 
    public int heightChecker(int[] heights) 
        int[] cpy = Arrays.copyOf(heights, heights.length);
        Arrays.sort(cpy);
        int ans = 0;
        for (int i = 0; i < heights.length; ++i) 
            if (heights[i] != cpy[i]) 
                ++ans;
            
        
        return ans;
    

class Solution 
    public int heightChecker(int[] heights) 
        // 对高度计数
        int[] cnt = new int[101];
        for (int h : heights) 
            ++cnt[h];
        

        int idx = 0, ans = 0;
        for (int h = 1; h <= 100; ++h) // 按顺序遍历高度
            for (int i = 0; i < cnt[h]; ++i) // 高度的数量
                if (heights[idx] != h) 
                    ++ans;
                
                // 移动位置
                ++idx;
            
        
        return ans;
    


原题传送门:https://leetcode.cn/problems/height-checker/


非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


以上是关于算法leetcode1051. 高度检查器(rust和go)的主要内容,如果未能解决你的问题,请参考以下文章

Python描述 LeetCode 1051. 高度检查器

LeetCode 1051. 高度检查器

LeetCode 1051. 高度检查器

LeetCode 1051 高度检查器[排序] HERODING的LeetCode之路

Leetcode 1051.高度检查

LeetCode 1051. Height Checker