Height Checker

Problem

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

Solution

Time: O(n) Space: O(1)

class Solution {
    public int heightChecker(int[] heights) {
        var cnts = new int[101];
        for (var h : heights) {
            cnts[h] += 1;
        }
        var idx = 0;
        var sorted = new int[heights.length];
        var diffs = 0;
        for (var i = 0; i < sorted.length; i++) {
            while (cnts[idx] == 0) {
                idx += 1;
            }
            sorted[i] = idx;
            cnts[idx] -= 1;

            if (sorted[i] != heights[i]) {
                diffs += 1;
            }
        }

        return diffs;
    }
}

Recent posts from blogs that I like

Test iCloud Drive using Cirrus

Problems syncing files with iCloud Drive? Don't just turn it off and back on again. Use Cirrus instead to upload a test file, and check whether syncing that works. Full details.

via The Eclectic Light Company

Concurrent Servers: Part 8 - Go

This is part 8 in a series of posts on writing concurrent network servers. In this part, we'll switch to Go and see how it tackles the challenges described earlier in the series. All posts in the series: Part 1 - Introduction Part 2 - Threads Part 3 - Event-driven Part 4 - libuv Part 5 - Redis case ...

via Eli Bendersky

You should never be angry at work

I try not to give a lot of prescriptive advice about working in tech companies1. There are many ways to be successful, and every company works differently. If you’re shipping projects and your management chain is happy, it doesn’t really matter how you’ve accomplished it. However, there’s one thing ...

via Sean Goedecke