Talentd
FleetCode
Make and follow sheets.Sign in

Minimum Cost to Move Chips to The Same Position solution and explanation

EasyArrayGreedyMath5 min read72.8% acceptanceUpdated 9 Apr 2026
Minimum Cost to Move Chips to The Same Position | LeetCode 1217 | C++, Java, PythonKnowledge Center · 8:26 · 6K viewsWatch on YouTube
9 more videos on this problem
  1. Minimum Cost to Move Chips to The Same Position | LeetCode 1217 | C++, Java, PythonKnowledge Center · 8:26 · 6K views
  2. Minimum Cost to Move Chips to The Same Position | Live Coding with Explanation | Leetcode #1217Algorithms Made Easy · 4:26 · 5K views
  3. Minimum Cost to Move Chips to The Same Position | Leetcode 1217 | Array | MathAyushi Sharma · 15:48 · 4K views
  4. Minimum Cost to Move Chips to The Same Position | Leetcode 1217 | Linear O(n) 🔥🔥🔥🔥Coding Decoded · 9:02 · 1K views
  5. Minimum Cost to Move Chips to The Same Position | Leet code 1217 | Theory explained + Python codeSai Anish Malla · 9:27 · 1K views
  6. Minimum Cost to Move Chips to The Same Position | LeetCode 1217 | Coders CampCoders Camp · 5:27 · 707 views
  7. Minimum Cost to Move Chips to The Same Position Leetcode 1217 Problem Solution with CodeSuperCode · 6:18 · 532 views
  8. Daily Leetcode #219: Nov 05, 2020 - 1217. Minimum Cost to Move Chips to The Same PositionProgramming Live with Larry · 6:27 · 348 views
  9. Morgan Stanley - Minimum Cost to Move Chips to The Same PositionGilbert Zhuo · 2:06 · 329 views
  10. Daily Leetcode #615: Dec 06, 2021 - 1217. Minimum Cost to Move Chips to The Same PositionProgramming Live with Larry · 6:16 · 230 views

The problem

We have n chips, where the position of the ith chip is position[i].

We need to move all the chips to the same position. In one step, we can change the position of the ith chip from position[i] to:

  • position[i] + 2 or position[i] - 2 with cost = 0.
  • position[i] + 1 or position[i] - 1 with cost = 1.

Return the minimum cost needed to move all the chips to the same position.

Example 1:

Input: position = [1,2,3]
Output: 1
Explanation: First step: Move the chip at position 3 to position 1 with cost = 0.
Second step: Move the chip at position 2 to position 1 with cost = 1.
Total cost is 1.

Example 2:

Input: position = [2,2,2,3,3]
Output: 2
Explanation: We can move the two chips at position  3 to position 2. Each move has cost = 1. The total cost = 2.

Example 3:

Input: position = [1,1000000000]
Output: 1

Constraints:

  • 1 <= position.length <= 100
  • 1 <= position[i] <= 10^9

Approach overview

Problem Overview: You get an array where position[i] represents the location of the i-th chip. Moving a chip by 2 positions costs 0, while moving it by 1 position costs 1. The task is to move all chips to the same position with the minimum total cost.

Approach 1: Counting Even and Odd Positions (O(n) time, O(1) space)

The key observation comes from movement cost. Moving a chip by 2 steps costs nothing, which means you can freely move between positions with the same parity (even → even or odd → odd). Cost only appears when switching parity. Iterate through the array once and count how many chips are on even positions and how many are on odd positions. If you move all chips to an even position, every chip currently on an odd position costs 1 to move. If you move everything to an odd position, every chip on an even position costs 1. The minimum cost is simply min(evenCount, oddCount). This greedy counting strategy works because all same-parity moves are free, so the only cost is flipping parity.

This approach uses simple iteration over the array and a greedy decision based on which parity group is smaller.

Approach 2: Use Modular Arithmetic (O(n) time, O(1) space)

The same idea can be expressed more mathematically using position[i] % 2. The modulo operation directly tells whether a position is even or odd. Iterate through the array and increment counters depending on the result of the modulo operation. Since moving by 2 preserves parity, all chips with the same modulo value can gather at one position for free. Chips with the opposite modulo require a single move costing 1. After processing the array, return the minimum of the two counts.

This formulation emphasizes the mathematical insight behind the problem and highlights the role of modular arithmetic. It leads to the same optimal greedy decision and requires only constant extra space.

Recommended for interviews: Interviewers expect the parity observation that moving by 2 is free. The optimal solution counts chips on even and odd positions and returns the smaller group size. Brute force simulations are unnecessary here. Demonstrating the parity insight quickly shows strong problem-solving and pattern recognition.

Approach 1: Counting Even and Odd Indices

The main observation here is that moving chips from position p to p+2 or p-2 incurs no cost. Hence, the cost to align all chips into one position is essentially the cost of moving all odd-indexed chips to even positions or vice versa.

To achieve this, count the number of chips at odd positions and the number of chips at even positions. The minimum cost to move all chips to the same position is the lesser of the two counts.

def minCostToMoveChips(position):
    odd_count = sum(1 for p in position if p % 2 == 1)
    even_count = len(position) - odd_count
    return min(odd_count, even_count)

# Example usage
position = [1, 2, 3]
print(minCostToMoveChips(position))
import java.util.List;

public class Solution {
    public int minCostToMoveChips(List<Integer> position) {
        int oddCount = 0, evenCount = 0;
        for (int pos : position) {
            if (pos % 2 == 0) evenCount++;
            else oddCount++;
        }
        return Math.min(oddCount, evenCount);
    }
    
    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.minCostToMoveChips(Arrays.asList(1, 2, 3)));
    }
}
#include <vector>
using namespace std;

int minCostToMoveChips(vector<int>& position) {
    int oddCount = 0, evenCount = 0;
    for (const auto& pos : position) {
        if (pos % 2 == 0) evenCount++;
        else oddCount++;
    }
    return min(oddCount, evenCount);
}

// Example usage
#include <iostream>
int main() {
    vector<int> position = {1, 2, 3};
    cout << minCostToMoveChips(position) << endl;
    return 0;
}
function minCostToMoveChips(position) {
    let oddCount = 0, evenCount = 0;
    for (let i = 0; i < position.length; i++) {
        if (position[i] % 2 === 0) evenCount++;
        else oddCount++;
    }
    return Math.min(oddCount, evenCount);
}

// Example usage
console.log(minCostToMoveChips([1, 2, 3]));
#include <stdio.h>

int minCostToMoveChips(int* position, int positionSize) {
    int oddCount = 0, evenCount = 0;
    for (int i = 0; i < positionSize; i++) {
        if (position[i] % 2 == 0) evenCount++;
        else oddCount++;
    }
    return oddCount < evenCount ? oddCount : evenCount;
}

int main() {
    int position[] = {1, 2, 3};
    int size = sizeof(position) / sizeof(position[0]);
    printf("%d\n", minCostToMoveChips(position, size));
    return 0;
}
using System;
using System.Linq;

public class Solution {
    public int MinCostToMoveChips(int[] position) {
        int oddCount = position.Count(p => p % 2 == 1);
        int evenCount = position.Length - oddCount;
        return Math.Min(oddCount, evenCount);
    }

    public static void Main() {
        Solution sol = new Solution();
        Console.WriteLine(sol.MinCostToMoveChips(new int[] {1, 2, 3}));
    }
}

The Python solution uses list comprehensions to count chips at odd positions. Then it directly calculates chips at even positions as the complement and returns the minimum cost.

Complexity

Time Complexity: O(n), where n is the number of chips.
Space Complexity: O(1), utilizing only counters for calculations.

Try this approach in the editor

Approach 2: Use Modular Arithmetic

A similar but slightly varied approach leverages modular arithmetic to classify indices. As the cost is incurred when moving by an odd number of steps, the strategy remains to count parity of indices and work from there.

def minCostToMoveChips(position):
    count = [0, 0]
    for p in position:
        count[p % 2] += 1
    return min(count)

# Example usage
position = [1, 2, 3]
print(minCostToMoveChips(position))
import java.util.List;

public class Solution {
    public int minCostToMoveChips(List<Integer> position) {
        int[] count = new int[2];
        for (int pos : position) {
            count[pos % 2]++;
        }
        return Math.min(count[0], count[1]);
    }
    
    public static void main(String[] args) {
        Solution sol = new Solution();
        List<Integer> position = Arrays.asList(1, 2, 3);
        System.out.println(sol.minCostToMoveChips(position));
    }
}
#include <vector>
using namespace std;

int minCostToMoveChips(vector<int>& position) {
    int count[2] = {0};
    for (const auto& pos : position) {
        count[pos % 2]++;
    }
    return min(count[0], count[1]);
}

// Example usage
#include <iostream>
int main() {
    vector<int> position = {1, 2, 3};
    cout << minCostToMoveChips(position) << endl;
    return 0;
}
function minCostToMoveChips(position) {
    const count = [0, 0];
    for (let p of position) {
        count[p % 2] += 1;
    }
    return Math.min(count[0], count[1]);
}

// Example usage
console.log(minCostToMoveChips([1, 2, 3]));
#include <stdio.h>

int minCostToMoveChips(int* position, int positionSize) {
    int count[2] = {0};
    for (int i = 0; i < positionSize; i++) {
        count[position[i] % 2]++;
    }
    return count[0] < count[1] ? count[0] : count[1];
}

int main() {
    int position[] = {1, 2, 3};
    int size = sizeof(position) / sizeof(position[0]);
    printf("%d\n", minCostToMoveChips(position, size));
    return 0;
}
using System;
using System.Linq;

public class Solution {
    public int MinCostToMoveChips(int[] position) {
        int[] count = new int[2];
        foreach (int pos in position) {
            count[pos % 2]++;
        }
        return Math.Min(count[0], count[1]);
    }

    public static void Main() {
        Solution sol = new Solution();
        Console.WriteLine(sol.MinCostToMoveChips(new int[] {1, 2, 3}));
    }
}

Using a simple list to keep the even and odd counts seeks an effective way to track and compute the minimal movement cost across chip positions.

Complexity

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

Try this approach in the editor

Approach 3: Quick Thinking

Move all chips at even indices to position 0, and all chips at odd indices to position 1, all at a cost of 0. Then, choose the position (either 0 or 1) with fewer chips and move these chips to the other position. The minimum cost required is the smaller quantity of chips.

The time complexity is O(n), and the space complexity is O(1). Here, n is the number of chips.

func minCostToMoveChips(position []int) int {
	a := 0
	for _, p := range position {
		a += p & 1
	}
	b := len(position) - a
	if a < b {
		return a
	}
	return b
}
Try this approach in the editor

Complexity comparison

ApproachComplexity
Counting Even and Odd Indices

Time Complexity: O(n), where n is the number of chips.
Space Complexity: O(1), utilizing only counters for calculations.

Use Modular Arithmetic

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

Quick Thinking–

Complexity analysis

ApproachTimeSpaceWhen to Use
Counting Even and Odd PositionsO(n)O(1)Best general solution. Single pass with simple counters.
Modular Arithmetic (Parity Check)O(n)O(1)When expressing the parity logic using mathematical reasoning.

Frequently asked questions

Is Minimum Cost to Move Chips to The Same Position easy or hard?

Minimum Cost to Move Chips to The Same Position is classified as an Easy problem. The challenge is recognizing that moves by 2 are free, which groups positions by parity and reduces the solution to a simple counting strategy.

Minimum Cost to Move Chips to The Same Position Python/Java solution

The implementation in Python or Java iterates through the array and checks position % 2 to classify each chip as even or odd. Maintain two counters and return the minimum of the two. The algorithm runs in O(n) time and uses O(1) extra space.

How to solve Minimum Cost to Move Chips to The Same Position in O(n)?

Iterate through the array and check the parity of each position using position[i] % 2. Count how many chips are on even positions and how many are on odd positions. Since moves of 2 are free, chips within the same parity group can merge without cost. The final answer is min(evenCount, oddCount).

What is the best approach for Minimum Cost to Move Chips to The Same Position?

The optimal approach counts how many chips are on even positions and how many are on odd positions. Moving a chip by 2 costs 0, so chips can move freely between positions with the same parity. Only moves between even and odd positions cost 1. The minimum cost is the smaller of the two counts.

Is Minimum Cost to Move Chips to The Same Position asked at Google/Amazon/Meta?

Greedy parity-based problems like this appear frequently in coding interviews at companies such as Amazon, Google, and Meta. While the exact question may vary, recognizing patterns like parity grouping and zero-cost moves is a common interview skill.

What data structure is used in Minimum Cost to Move Chips to The Same Position?

The problem primarily uses an array for input and simple integer counters to track parity groups. No advanced data structures are required because the greedy insight reduces the task to counting.

What is the time complexity of Minimum Cost to Move Chips to The Same Position?

The optimal solution runs in O(n) time because it scans the array once to count chips at even and odd indices. Space complexity is O(1) since only two counters are maintained regardless of input size.

Comments

Now write it yourselfClose this page and solve Minimum Cost to Move Chips to The Same Position in the editor, without looking.
Practise Minimum Cost to Move Chips to The Same Position