DDSA Solutions

2460. Apply Operations to an Array

Time: O(n)
Space: O(n)
Advertisement

Intuition

Replace 0s with doubled value of previous non-zero, then shift zeros to end.

Algorithm

  1. 1Pass 1: scan left to right. If nums[i]==nums[i+1]: nums[i]*=2, nums[i+1]=0.
  2. 2Pass 2: remove zeros, pad end with zeros.

Common Pitfalls

  • After doubling, set original position to 0. Then compact array (move zeros to end).
2460.cs
C#
// Approach: Merge equal adjacent pairs (double first, zero second); shift non-zeros to front.
// Time: O(n) Space: O(n)

public class Solution
{
    public int[] ApplyOperations(int[] nums)
    {
        int[] ans = new int[nums.Length];

        for (int i = 0; i + 1 < nums.Length; ++i)
        {
            if (nums[i] == nums[i + 1])
            {
                nums[i] *= 2;
                nums[i + 1] = 0;
            }
        }

        int index = 0;
        foreach (int num in nums)
        {
            if (num > 0)
                ans[index++] = num;
        }

        return ans;
    }
}
Advertisement
Was this solution helpful?