LeetCode.1217-交换芯片(Play with Chips)
这是小川的第421次更新,第454篇原创
看题和准备
今天介绍的是LeetCode算法题中Easy级别的第270题(顺位题号是1217)。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
中文翻译
有一些芯片,第i个芯片位于位置chips[i]。
你可以在任何芯片上多次执行以下两种类型的任何一种移动(也可能为零次):
- 将第
i个芯片向左或向右移动2个单位,成本为0。 - 将第
i个芯片向左或向右移动1个单位,成本为1。
最初时,在同一位置可以有两个或多个芯片。返回将所有芯片移至同一位置(任何位置)所需的最低成本。
例如:
输入:chips = [1,2,3]
输出:1
说明:第二个芯片将以成本1移至位置3。第一个芯片将以成本0移至位置3。总成本为1。
输入:chips = [2,2,2,3,3]
输出:2
说明:第四和第五芯片都将移动到成本为1的位置2。最低总成本为2。
限制条件:
- 1 <= chips.length <= 100
- 1 <= chips[i] <= 10^9
第一种解法
一开始看题目,看的我一脸懵逼,这是个神马题目介绍?
开始认为是移动元素到固定的一个索引位置上,计算移动的最小成本,给的例子倒也能解释,但是在试了其他几组数据后,比如数组{1,3,5},结果是0,与我设想的结果1对不上,思路是错的,肯定是理解错了题目的意思。没办法,只能继续理解题意和用随机数组验证思路了。在明白题目究竟想要我们做啥后,只想来一句,我服了you!
回归正题,我们一起来看看这个题目的真面目。如果将题目中positon字眼,换成value,你就会很快明白题目在讲什么了。
给了一个数组,其中元素都是大于等于1的正整数,可以对数组中的任意元素进行两种操作:将元素值加2或减2,成本为0;将元素值加1或减1,成本为1。这两种操作都可以进行多次,现在要将数组中的元素值全部变为一个值,请问最低的成本是多少?
结合题目中的第二个例子来看,[2,2,2,3,3],有3个2,2个3,有两种办法,可以将这5个数统一,第一是3个2都变3,成本是3;第二个办法是2个3都变为2,成本是2,所以最小成本是2,也就是将2个3变为2。再来一个,比如[1,3,5],将3减去2变为1,成本为0,将5减两次2,也变为1,成本为0,最后总成本是0。
所以,这个问题本质上是计算数组中奇数和偶数的个数。
- 如果数组元素全部为偶数,全变成2,成本为0。
- 如果数组元素全部为奇数,全变成1,成本为0。
- 如果奇数元素个数大于偶数元素个数,将偶数元素加1全变为奇数,成本是偶数元素的个数。
- 如果奇数元素个数小于偶数元素个数,将奇数元素加1全变为偶数,成本是奇数元素的个数。
public int minCostToMoveChips(int[] chips) {
int even = 0, odd = 0;
for (int chip : chips) {
if (chip%2 == 0) {
even++; //偶数元素个数
} else {
odd++; //奇数元素个数
}
}
return odd > even ? even : odd;
}
小结
算法专题目前已更新LeetCode算法题文章276+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、在看就是对我最大的回报和支持!
LeetCode.1217-交换芯片(Play with Chips)的更多相关文章
- 交换芯片收发包的 DMA 实现原理
交换芯片支持:报文.计数.表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换 ...
- BCM策略路由交换芯片
BCM几个交换芯片的寄存器和相关的路由 EGR_L3_NEXT_HOP.EGR_L3_INTF.ING_L3_NEXT_HOP BCM XGS系列SDK中和路由相关的几个命令 l3 l3table. ...
- 基于335X平台的UBOOT中交换芯片驱动移植
基于335X平台的UBOOT中交换芯片驱动移植 一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3 ...
- 基于335X平台Linux交换芯片驱动开发
基于335X平台Linux交换芯片驱动开发 一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.Kernel版本:4.4.12,采用FDT 3.交换芯片MARVEL ...
- SQL语句中IF的简单使用 - 关联leetcode 627.交换工资
MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 & ...
- 【leetcode】1217. Minimum Cost to Move Chips to The Same Position
We have n chips, where the position of the ith chip is position[i]. We need to move all the chips to ...
- “全排列”问题系列(一)[LeetCode] - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题
转:http://www.cnblogs.com/felixfang/p/3705754.html 一.开篇 Permutation,排列问题.这篇博文以几道LeetCode的题目和引用剑指offer ...
- leetcode 5199. 交换字符串中的元素
地址 https://leetcode-cn.com/contest/weekly-contest-155/problems/smallest-string-with-swaps/ 给你一个字符串 ...
- [LeetCode] 627.交换性别
给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值.交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然). 要求只使用一个更新(Update)语句,并且没 ...
随机推荐
- JavaScript的7大基本类型
- SpringBoot 配置 Tomcat SSL
SpringBoot 配置 Tomcat SSL SSL(Secure Sockets Layer , 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密 ...
- 响应json数据之发送ajax的请求
一.前端异步请求代码: <span style="font-size:14px;">$.ajax ({ type: "POST", //请求的方式 ...
- 原生JS实现拖动滑块验证登录效果
♀分享一组利用原生JS实现拖动滑块验证效果 ♀在这个组代码中涉及三个方面的知识: ⑴事件处理 ⑵添加验证标记 ⑶选择器的封装 代码如下: <!DOCTYPE html> <htm ...
- IAT表和导入表
1.关于IAT(import address table)表 当exe程序中调用dll中的函数时,反汇编可以看到,call后面并不是跟的实际函数的地址,而是给了一个地址:
- nextAll([expr]) 查找当前元素之后所有的同辈元素。
nextAll([expr]) 概述 查找当前元素之后所有的同辈元素. 可以用表达式过滤 参数 exprStringV1.2 用来过滤的表达式 示例 描述: 给第一个div之后的所有元素加个类直线电机 ...
- ActiveMQ介绍
一.背景 中间件 由于业务的不同.技术的发展.硬件和软件的选择有所差别,导致了异构组件或应用并存的局面.要使这些异构的组件协同工作,一个有效的方式就是提供一个允许它们进行通信的层,该层即为中间件. 在 ...
- [Luogu] 选择客栈
https://www.luogu.org/problemnew/show/P1311 思路就是,从1到n枚举,输入color和price的值,我们需要记录一个距离第二个客栈最近的咖啡厅价钱合理的客栈 ...
- sfmlearner剖析
下面是slam14讲公式5.7 $Z\left(\begin{array}{l}{u} \\ {v} \\ {1}\end{array}\right)=\left(\begin{array}{ccc} ...
- loj541
七曜圣贤 sol:我标算还没写过,似乎分块就可以过(因为数据是随机的),我写个set可以有70~80分 //C++ #include<bits/stdc++.h> using namesp ...