1217. Play with Chips
Posted habibah-chang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1217. Play with Chips相关的知识,希望对你有一定的参考价值。
问题:
给定一个数组,表示了每一个chip的所在位置。
有以下的移动规则:
1.每向左or向右移动2个单位,消耗为0
2.没向左or向右移动1个单位,消耗为1
求将所有chip都移动到同一个位置,消耗最小是多少?
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
解法:
问题分析:
由移动规则可知,任一chip移动到任何位置,
所需消耗为:0或者1.
(比如需要移动6个单元,即移动2+2+2,3次2单位移动,每次耗费0,总消耗为0)
(比如需要移动7个单元,即移动2+2+2+1,3次2单位+1次1单位移动,3次耗费0,1次耗费1,总消耗为1)
即,有两种情况,
1.将所有chip移动到一个奇数位。
那么奇数位上的chip,相对目的位置移动2的倍数次,消耗为0,
所有奇数位上的chip总消耗为【0】。
偶数位上的chip,相对目的位置移动2的倍数+1次,消耗为1
所有偶数位上的chip总消耗为【chip数*1】。
2.将所有chip移动到一个偶数位。
那么偶数位上的chip,相对目的位置移动2的倍数次,消耗为0,
所有偶数位上的chip总消耗为【0】。
奇数位上的chip,相对目的位置移动2的倍数+1次,消耗为1
所有奇数位上的chip总消耗为【chip数*1】。
那么问题转换为:
求奇数位和偶数位上的chip数,最终求这两种情况的最小值即可。
代码参考:
1 class Solution { 2 public: 3 int minCostToMoveChips(vector<int>& chips) { 4 int oddevenc[2]={0}; 5 for(int c:chips){ 6 oddevenc[c%2]++; 7 } 8 return min(oddevenc[0], oddevenc[1]); 9 } 10 };
以上是关于1217. Play with Chips的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode.1217-交换芯片(Play with Chips)
Leetcode-5213 Play with Chips(玩筹码)
LeetCode --- 1217. Minimum Cost to Move Chips to The Same Position 解题报告
LeetCode --- 1217. Minimum Cost to Move Chips to The Same Position 解题报告