Move Zeroes

Problem

Given an integer array nums, move all 0’s to the end of it while maintaining the relative order of the non-zero elements.

Note that you must do this in-place without making a copy of the array.

Example 1:

Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]

Example 2:

Input: nums = [0]
Output: [0]

Constraints:

  • 1 <= nums.length <= 10^4
  • -2^31 <= nums[i] <= 2^31 - 1

Follow up: Could you minimize the total number of operations done?

Solution

O(n) time/space solution. Sloppy code, though.

class Solution {
    public void moveZeroes(int[] nums) {
        var firstSlot = -1;

        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {
                firstSlot = i;
                break;
            }
        }

        if (firstSlot == -1) {
            return;
        }

        var nextSlot = firstSlot;
        for (int i = 0; i < nums.length; i++) {
            if (i < firstSlot) {
                continue;
            }

            if (nums[i] != 0) {
                nums[nextSlot] = nums[i];
                nums[i] = 0;
                nextSlot += 1;
            }
        }
    }
}

Recent posts from blogs that I like

Critics against art: How John Singer Sargent was erased

How two members of the Bloomsbury Group battled with John Singer Sargent and destroyed his reputation for nearly 50 years, and reshaped 20th century painting.

via The Eclectic Light Company

Human-AI partnerships are for alignment, not capability

It’s common to compare the current AI takeover of software engineering to the rise of AI in chess. Chess AIs went from much weaker than serious players to much stronger than even the strongest humans. Between those points, there was a middle period dominated by “centaurs”: human-AI partnerships that...

via Sean Goedecke

Replacing the old battery on rechargeable bike lights

Hello! Recently I needed bike lights for my bike. And I remembered that I already had rechargeable bike lights that I bought ten years ago, that I hadn’t tried in a long time. I tried to recharge them, but after fully charging them, they only worked for maybe 5 minutes before they turned off again. ...

via Julia Evans