算法提高之LeetCode刷题数据结构和算法分析

高度检查器

2020-02-26  本文已影响0人  _阿南_

题目:

学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。
请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。
示例:
输入:heights = [1,1,4,2,1,3]
输出:3
提示:
1 <= heights.length <= 100
1 <= heights[i] <= 100

题目的理解:

看到这个理解,移动人数实现“非递减”排列,那么示例中移动4,2后就可以实现了,最小必要移动人数也就是2啊。为何是3呢。

from typing import List
class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        index = len(heights)
        count = 0

        while index > 0:
            temp_list = heights[0:index]

            max_value = max(temp_list)
            temp_index = heights.index(max_value)
            if temp_index != index-1 and heights[index-1] != max_value:
                count += 1
                heights.remove(max_value)
                heights.insert(index-1, max_value)

            index -= 1

        return count

通过代码也可以实现移动2后就可以实现“非递减”排列。
但是。。。
题目想表达的意思是:“非递减”排列后与之前的差别,那么不同的数就是移动的人数

python实现

class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        heights_sorted = sorted(heights)
        count = 0
        for i in range(len(heights)):
            if heights[i] != heights_sorted[i]:
                count += 1

        return count

提交

成功

出题的人没有将问题说清楚,那么好尴尬。

// END 听着音乐写的代码,已经忘记了为何写代码

上一篇 下一篇

猜你喜欢

热点阅读