原题说明
Students are asked to stand in non-decreasing order of heights for an annual photo.
Return the minimum number of students that must move in order for all students to be standing in non-decreasing order of height.
Notice that when a group of students is selected they can reorder in any possible way between themselves and the non selected students remain on their seats.
Example 1:
Input: heights = [1,1,4,2,1,3]
Output: 3
Explanation:
Current array : [1,1,4,2,1,3]
Target array : [1,1,1,2,3,4]
On index 2 (0-based) we have 4 vs 1 so we have to move this student.
On index 4 (0-based) we have 1 vs 3 so we have to move this student.
On index 5 (0-based) we have 3 vs 4 so we have to move this student.
Example 2:
Input: heights = [5,1,2,3,4]
Output: 5
Example 3:
Input: heights = [1,2,3,4,5]
Output: 0
Constraints:
1 <= heights.length <= 100
1 <= heights[i] <= 100
解题思路
这道题可以有很多做法。最高效的方法是:
建立一个数组height_to_num
, 其index
为height
,对应的值为height
出现的次数,该数组可替代排序
遍历一遍heights
数组来更新height_to_num
。
然后再遍历一遍heights
数组,同时从height_to_num
中找到排序后的高度sort_height
,
比较height
和sort_height
, 如果不同则返回结果+1
。
示例代码 (cpp)
1 | class Solution { |
示例代码 (java)
1 | class Solution { |
示例代码 (python)
1 | class Solution: |
复杂度分析
时间复杂度: O(N)
空间复杂度: O(height)
归纳总结
我们在Youtube上更新了视频讲解,欢迎关注!