1217. Play with Chips*

1217. Play with Chips*

https://leetcode.com/problems/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

C++ 实现 1

本题的 chips 数组表示第 i 芯片的位置, 解题的关键是注意题目中的条件: 可以移动任意位置的芯片以及任意次数, 并且如果移动芯片 2 个单位, cost 为 0;

那么, 我们可以不停的以 2 为单位移动芯片, 直到它处在 0 或者 1 位置上, 反正这个过程不用任何 cost.
然后比较 0 和 1 位置上的芯片个数, 哪个位置的芯片数量少, 之后就移动哪个位置的芯片.

下面代码中, 用 record 来记录 0 和 1 位置上芯片的个数.

class Solution {
private:
    int get_remainder(int N) {
        if (N % 2 == 1) return 1;
        return 0;
    }
public:
    int minCostToMoveChips(vector<int>& chips) {
        unordered_map<int, int> record;
        for (auto &n : chips)
            record[get_remainder(n)] ++;
        return std::min(record[0], record[1]);
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值