题目:
学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。
请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。
示例:
输入: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 听着音乐写的代码,已经忘记了为何写代码
网友评论