Skip to main content

Apply Operations to an Array - Solution & Explanation

EasyArrayTwo PointersSimulation16 min readAsked at: Amazon, Meta, Google +1
Practice this problem

Problem Statement

You are given a 0-indexed array nums of size n consisting of non-negative integers.

You need to apply n - 1 operations to this array where, in the ith operation (0-indexed), you will apply the following on the ith element of nums:

  • If nums[i] == nums[i + 1], then multiply nums[i] by 2 and set nums[i + 1] to 0. Otherwise, you skip this operation.

After performing all the operations, shift all the 0's to the end of the array.

  • For example, the array [1,0,2,0,0,1] after shifting all its 0's to the end, is [1,2,1,0,0,0].

Return the resulting array.

Note that the operations are applied sequentially, not all at once.

 

Example 1:

Input: nums = [1,2,2,1,1,0]
Output: [1,4,2,0,0,0]
Explanation: We do the following operations:
- i = 0: nums[0] and nums[1] are not equal, so we skip this operation.
- i = 1: nums[1] and nums[2] are equal, we multiply nums[1] by 2 and change nums[2] to 0. The array becomes [1,4,0,1,1,0].
- i = 2: nums[2] and nums[3] are not equal, so we skip this operation.
- i = 3: nums[3] and nums[4] are equal, we multiply nums[3] by 2 and change nums[4] to 0. The array becomes [1,4,0,2,0,0].
- i = 4: nums[4] and nums[5] are equal, we multiply nums[4] by 2 and change nums[5] to 0. The array becomes [1,4,0,2,0,0].
After that, we shift the 0's to the end, which gives the array [1,4,2,0,0,0].

Example 2:

Input: nums = [0,1]
Output: [1,0]
Explanation: No operation can be applied, we just shift the 0 to the end.

 

Constraints:

  • 2 <= nums.length <= 2000
  • 0 <= nums[i] <= 1000

Approach Overview

Problem Overview: You receive an integer array. First, scan left to right and apply a rule: if nums[i] == nums[i+1], double nums[i] and set nums[i+1] to zero. After completing this pass, move all zeros to the end while keeping the relative order of non‑zero elements. The result is the transformed array.

Approach 1: In-Place Modification with Zero Collection (Time: O(n), Space: O(n))

This method directly simulates the problem statement. Iterate through the array once and apply the merge rule: whenever two adjacent values are equal, update nums[i] to 2 * nums[i] and set nums[i+1] to zero. After this pass, build a new result by collecting all non-zero elements in order and appending the required number of zeros at the end. The key insight is separating the two phases: first apply the operation exactly as described, then perform a stable zero shift. This approach is easy to reason about and mirrors the problem statement, making it a solid baseline implementation using a simple array traversal and simulation.

Approach 2: Two-Pointer Technique for Zero Shift (Time: O(n), Space: O(1))

After applying the merge operation in a single left‑to‑right pass, shift non-zero values forward using the two pointers pattern. Maintain a write pointer that marks where the next non-zero element should go. Scan the array with another pointer. When a non-zero value appears, write it at the write index and advance the pointer. After processing all elements, fill the remaining positions with zeros. This avoids creating a new array and keeps the algorithm fully in-place. The insight is that the second phase is identical to the classic “move zeros to the end” problem.

Recommended for interviews: The two-pointer approach is typically preferred. It keeps the algorithm linear at O(n) time while using O(1) extra space. Showing the straightforward simulation first demonstrates that you understand the problem mechanics. Following it with the in-place two-pointer optimization shows stronger algorithmic thinking and familiarity with common array patterns.

Approach 1: In-Place Modification with Zero Collection

This approach involves iterating through the array and applying operations only when an element is equal to the next one. After completing all operations, traverse the array again to collect non-zero elements, thus effectively moving all zeros to the end.

The function first iterates through the array to apply the given operations: whenever nums[i] == nums[i+1], it multiplies nums[i] by 2 and sets nums[i+1] to zero. Then, it creates a new list of non-zero elements and appends the appropriate number of zeros to the end.

Code

Python

C

C++

Java

C#

JavaScript

Complexity

Time complexity is O(n), as we iterate through the array twice, which is efficient given the constraints. Space complexity is O(n) due to the construction of the result array, which is necessary to shift zeros to the end.

Try this approach in the editor →

Approach 2: Two-Pointer Technique for Zero Shift

This alternative employs a two-pointer technique whereby one pointer processes operational changes and another places non-zero values, thereby compactly reordering elements without needing an auxiliary array.

Utilizing a write_position, this method writes non-zero elements to the front, efficiently shifting zeros to the end. This guarantees minimum in-place changes, effectively combining both stages of operation and zero positioning.

Code

Python

C

C++

Java

C#

JavaScript

Complexity

Time complexity remains O(n) as the list is traversed twice; space complexity is constant, O(1), as no extra data structures are used besides a few pointers.

Try this approach in the editor →

Approach 3: Simulation

We can directly simulate according to the problem description.

First, we traverse the array nums. For any two adjacent elements nums[i] and nums[i+1], if nums[i] = nums[i+1], then we double the value of nums[i] and change the value of nums[i+1] to 0.

Then, we create an answer array ans of length n, and put all non-zero elements of nums into ans in order.

Finally, we return the answer array ans.

The time complexity is O(n), where n is the length of the array nums. Ignoring the space consumption of the answer, the space complexity is O(1).

Code

Python

Java

C++

Go

TypeScript

Rust

Try this approach in the editor →

Complexity Comparison

ApproachComplexity
In-Place Modification with Zero Collection

Time complexity is O(n), as we iterate through the array twice, which is efficient given the constraints. Space complexity is O(n) due to the construction of the result array, which is necessary to shift zeros to the end.

Two-Pointer Technique for Zero Shift

Time complexity remains O(n) as the list is traversed twice; space complexity is constant, O(1), as no extra data structures are used besides a few pointers.

Simulation—

Detailed Complexity Analysis

ApproachTimeSpaceWhen to Use
In-Place Modification with Zero CollectionO(n)O(n)When clarity is more important than memory usage; mirrors the problem statement directly
Two-Pointer Technique for Zero ShiftO(n)O(1)Preferred for interviews and production when memory usage must stay constant

Video Solution

Apply Operations to an Array - Leetcode 2460 - Python • NeetCodeIO • 6,003 views views

Watch 9 more video solutions →

Frequently Asked Questions

Is Apply Operations to an Array easy or hard?
Apply Operations to an Array is classified as an Easy problem on LeetCode with an acceptance rate around 74%. It mainly tests careful array traversal, simulation logic, and familiarity with the two-pointer pattern.
Apply Operations to an Array Python/Java solution
Both Python and Java implementations follow the same logic: iterate once to apply merge operations and then shift non-zero elements using a pointer that tracks the next write position. The algorithm remains O(n) time and O(1) extra space.
How to solve Apply Operations to an Array in O(n)?
Iterate through the array and merge equal adjacent values by doubling the left value and setting the right value to zero. After this pass, use a two-pointer technique to move non-zero elements forward and fill the rest of the array with zeros. Both steps are linear scans, giving O(n) time complexity.
What is the best approach for Apply Operations to an Array?
The two-pointer approach is the most efficient solution. First apply the merge rule in a single pass, then move non-zero values forward using a write pointer. This keeps the algorithm O(n) time with O(1) extra space while preserving the order of elements.
Is Apply Operations to an Array asked at Google/Amazon/Meta?
Problems like this frequently appear in screening rounds at companies such as Amazon and Google because they test array manipulation and pointer techniques. The pattern of merging elements and shifting zeros is a common interview variation.
What data structure is used in Apply Operations to an Array?
The problem primarily uses arrays. The optimized solution also relies on the two-pointer technique to rearrange elements in place without additional data structures.
What is the time complexity of Apply Operations to an Array?
The optimal solution runs in O(n) time because the array is scanned a constant number of times. One pass applies the merge operations and another pass shifts non-zero elements forward. Each element is processed only a few times.

Ready to solve this problem?

Practice Apply Operations to an Array with our built-in code editor and test cases.

Practice on FleetCode