玩筹码
2021/12/17 6:25:04
本文主要是介绍玩筹码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这道题出自LeetCode,题目如下:
数轴上放置了一些筹码,每个筹码的位置存在数组 chips
当中。
你可以对 任何筹码 执行下面两种操作之一(不限操作次数,0 次也可以):
将第 i
个筹码向左或者右移动 2 个单位,代价为 0。
将第 i
个筹码向左或者右移动 1 个单位,代价为 1。
最开始的时候,同一位置上也可能放着两个或者更多的筹码。
返回将所有筹码移动到同一位置(任意位置)上所需要的最小代价。
示例 1:
输入:chips = [1,2,3]
输出:1
解释:第二个筹码移动到位置三的代价是 1,第一个筹码移动到位置三的代价是 0,总代价为 1。
示例 2:
输入:chips = [2,2,2,3,3]
输出:2
解释:第四和第五个筹码移动到位置二的代价都是 1,所以最小总代价为 2。
这道题其实是个脑筋急转弯的题目。由题意可以看出,移动偶数距离是无需代价的,而移动奇数距离是需要n * 1个代价(n为筹码的数量)。那么首先,我们可以将位于偶数位置上的筹码进行合并,合并到一个位置上,此时移动所需的代价为0,因为偶数减去一个偶数依旧是偶数;类似地,也可以将位于奇数位置上的筹码进行合并,合并到一个位置上,代价依旧是0,因为奇数减去一个奇数得到的是偶数。
在进行这两步操作后,筹码被我们分成了两堆,一堆位于某一个奇数位置,一堆位于某一个偶数位置,此时的代价为0。显然最后一步,就是将奇数堆移动到偶数堆,或者偶数堆移动到奇数堆。假设奇数堆的筹码数量为m,偶数堆的筹码数量为n,那么最小的移动代价即为min(m, n)。
最后通过的代码如下:
class Solution { public: int minCostToMoveChips(vector<int>& position) { int odd = 0; int even = 0; for(auto p : position) { p & 0x1 ? odd++ : even++; } return min(odd, even); } };
这篇关于玩筹码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide