There are some chips, and the i-th chip is at position chips[i]
.
You can perform any of the two following types of moves any number of times (possibly zero) on any chip:
- Move the
i
-th chip by 2 units to the left or to the right with a cost of 0. - Move the
i
-th chip by 1 unit to the left or to the right with a cost of 1.
There can be two or more chips at the same position initially.
Return the minimum cost needed to move all the chips to the same position (any position).
Example 1:
Input: chips = [1,2,3] Output: 1 Explanation: Second chip will be moved to positon 3 with cost 1. First chip will be moved to position 3 with cost 0. Total cost is 1.
Example 2:
Input: chips = [2,2,2,3,3] Output: 2 Explanation: Both fourth and fifth chip will be moved to position two with cost 1. Total minimum cost will be 2.
Constraints:
1 <= chips.length <= 100
1 <= chips[i] <= 10^9
上面是题目描述。
解决这个问题,破费了一番思考,去看了别人的答案,怎么也不理解,chips的下标index,和其数值的关系。
一开始觉得就是chips中的数据,偶数-偶数, 奇数-奇数之间互移cost为0,奇偶间移动cost为1,看别人答案,又在统计chips中偶数的个数,实在不解。
查了很多人的解释,才恍然大悟。
尤其针对example 2可以更好理解
Input: chips = [2,2,2,3,3]
Output: 2
Explanation: Both fourth and fifth chip will be moved to position two with cost 1. Total minimum cost will be 2.
这么想,chips里面是另一个数组的下标,相当于3个下标2,2个下标3, 如下图,chips数组表示的是数据数组,那么要将这些数据移到同一个位置,最小的cost显然是将2个3移到位置2, cost是2.
位置 | 0 | 1 | 2 | 3 | 4 |
chips数组 | 2 | 2 | 2 | 3 | 3 |
数据 | 2 | 3 | |||
2 | 3 | ||||
2 |
class Solution {
public:
int minCostToMoveChips(vector<int>& chips) {
int even=0;
for(int i:chips) if(!(i%2)) ++even;
return min(even,(int)chips.size()-even);
}
};