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 <= 1001 <= heights[i] <= 100
Solutions
Solution 1: Sorting
We can first sort the heights of the students, then compare the sorted heights with the original heights, and count the positions that are different.
The time complexity is O(n × log n), and the space complexity is O(n). Where n is the number of students.
class Solution: def heightChecker(self, heights: List[int]) -> int: expected = sorted(heights) return sum(a != b for a, b in zip(heights, expected))(code-box)
Solution 2: Counting Sort
Since the height of the students in the problem does not exceed 100, we can use counting sort. Here we use an array cnt of length 101 to count the number of times each height hi appears.
The time complexity is O(n + M), and the space complexity is O(M). Where n is the number of students, and M is the maximum height of the students. In this problem, M = 101.
class Solution: def heightChecker(self, heights: List[int]) -> int: cnt = [0] * 101 for h in heights: cnt[h] += 1 ans = i = 0 for j in range(1, 101): while cnt[j]: cnt[j] -= 1 if heights[i] != j: ans += 1 i += 1 return ans(code-box)
