1217. Play with Chips 理解你,不容易

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.

位置01234
chips数组22233
      
数据  23 
   23 
   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);
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值