Problem Description
A school is trying to take an annual photo of all the students. The students are asked to stand in a single file line in non-decreasing order by height. Let this ordering be represented by the integer array expected
where expected[i]
is the expected height of the ith
student in line.
You are given an integer array heights
representing the current order that the students are standing in. Each heights[i]
is the height of the ith
student in line (0-indexed).
Return the number of indices where heights[i] != expected[i]
.
Example 1:
Input: heights = [1,1,4,2,1,3] Output: 3 Explanation: heights: [1,1,4,2,1,3] expected: [1,1,1,2,3,4] Indices 2, 4, and 5 do not match.
Example 2:
Input: heights = [5,1,2,3,4] Output: 5 Explanation: heights: [5,1,2,3,4] expected: [1,2,3,4,5] All indices do not match.
Example 3:
Input: heights = [1,2,3,4,5] Output: 0 Explanation: heights: [1,2,3,4,5] expected: [1,2,3,4,5] All indices match.
Constraints:
1 <= heights.length <= 100
1 <= heights[i] <= 100
Difficulty: Easy
Tags: array, sorting, counting sort
Rating: 93.46%
Complexity Analysis
The solution has the following complexity characteristics:
- Time Complexity: O(n+r) where n is the number of elements in the input array and r is the range of the elements
- Space Complexity: O(r)
Solution
Here’s my Python solution to this problem:
class Solution:
def heightChecker(self, heights: List[int]) -> int:
minv, maxv = min(heights), max(heights)
r = maxv-minv+1
count = [0] * r
for h in heights:
count[h-minv] += 1
s = 0
h = 0
for i in range(r):
while count[i] > 0:
if heights[h] != i + minv:
s += 1
h += 1
count[i] -= 1
return s