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)语句,并且没 ...
随机推荐
- 内网监控zabbix
告警 告警方式:linkedsee 类型:使用脚本linkedsee.sh [root@zabbix-server ~]# cat linkedsee.sh #! /bin/bash SERVICE_ ...
- 音频转换 wav to wav、mp3或者其它
1.首先介绍一种NAudio 的方式 需要导入 NAudio.dll 下面请看核心代码 using (WaveFileReader reader = new WaveFileReader(in_pat ...
- SQL server 自定义函数FUNCTION的使用
原文链接:https://blog.csdn.net/lanxingbudui/article/details/81736402 前言: 在SQL server中不仅可以可以使用系统自带 ...
- selenium+pyquery爬取淘宝商品信息
import re from selenium import webdriver from selenium.common.exceptions import TimeoutException fro ...
- [转]vue-router各个属性的作用及用法
转自以下网址,当备忘使用:https://www.cnblogs.com/goloving/p/9211358.html vue-router是vue单页面开发的路由,就是决定页面跳转的! <r ...
- Verilog求余
在实现三角函数时,考虑到函数的周期性,综量(自变量)需对周期做求余运算. 假设函数周期为T = 2^N,那么求余运算就是直接取该数的低N位,即: 以M位正数为例(符号位为0),reg [M-1:0] ...
- javascript中的class类 以及class的继承
在上面的章节中我们看到了JavaScript的对象模型是基于原型实现的,特点是简单,缺点是理解起来比传统的类-实例模型要困难,最大的缺点是继承的实现需要编写大量代码,并且需要正确实现原型链. 有没有更 ...
- axios拦截器使用方法
vue中axios获取后端接口数据有时候需要在请求开始时显示loading,请求结束后隐藏loading,这时候到每次调接口时都写上有点繁琐,有时候还会漏写. 这时候axios的拦截器就起了作用,我们 ...
- python中with语句的使用
引言 with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用) ...
- swoole入门简介
原文:https://www.cnblogs.com/dormscript/p/4811921.html 本文主要记录一下学习swoole的过程.填过的坑以及swoole究竟有多么强大! 首先说一下对 ...