这是小川的第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)的更多相关文章

  1. 交换芯片收发包的 DMA 实现原理

    交换芯片支持:报文.计数.表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换 ...

  2. BCM策略路由交换芯片

    BCM几个交换芯片的寄存器和相关的路由 EGR_L3_NEXT_HOP.EGR_L3_INTF.ING_L3_NEXT_HOP BCM XGS系列SDK中和路由相关的几个命令 l3 l3table. ...

  3. 基于335X平台的UBOOT中交换芯片驱动移植

    基于335X平台的UBOOT中交换芯片驱动移植 一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3 ...

  4. 基于335X平台Linux交换芯片驱动开发

    基于335X平台Linux交换芯片驱动开发   一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.Kernel版本:4.4.12,采用FDT 3.交换芯片MARVEL ...

  5. SQL语句中IF的简单使用 - 关联leetcode 627.交换工资

    MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 & ...

  6. 【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 ...

  7. “全排列”问题系列(一)[LeetCode] - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题

    转:http://www.cnblogs.com/felixfang/p/3705754.html 一.开篇 Permutation,排列问题.这篇博文以几道LeetCode的题目和引用剑指offer ...

  8. leetcode 5199. 交换字符串中的元素

    地址  https://leetcode-cn.com/contest/weekly-contest-155/problems/smallest-string-with-swaps/ 给你一个字符串  ...

  9. [LeetCode] 627.交换性别

    给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值.交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然). 要求只使用一个更新(Update)语句,并且没 ...

随机推荐

  1. 03—Code First

           Code First模式我们称之为“代码优先”模式,使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(其实就是领域模型的实现过程),然后自动生成数据库.这样设计的 ...

  2. CSS3 -- 弹性盒

    新版弹性盒 兼容到IE10及以上 flex小游戏 display: flex; 设置为弹性盒(父元素添加) flex-direction 用来来确定主轴的方向,从而确定基本的项目排列方向. 参数 说明 ...

  3. config文件的实现

    https://www.cnblogs.com/jiayouwyhit/p/3836510.html //Config.h #pragma once #include <string> # ...

  4. Codeforces Round #589 (Div. 2) A. Distinct Digits

    链接: https://codeforces.com/contest/1228/problem/A 题意: You have two integers l and r. Find an integer ...

  5. [Algorithm] Chunk Array

    // --- Directions// Given an array and chunk size, divide the array into many subarrays// where each ...

  6. Codeforces Round #455 (Div. 2) 909E. Coprocessor

    题 OvO http://codeforces.com/contest/909/problem/E CF455 div2 E CF 909E 解 类似于拓扑排序地进行贪心, 对于 Ei=0 并且入度为 ...

  7. docker学习---docker基础知识

    目录 docker的基础 1.安装docker 2.使用镜像 3.镜像迁移|导入和导出 4.docker Hub介绍 5.搭建私有镜像仓库 5.1.docker开源的镜像分发工具--docker Re ...

  8. linux下如何编辑txt文档

    利用vi命令 [root@bogon a]# vi a.txt   打开a.txt文档 vi a.txt后,键盘敲i,可以进入编辑模式, 输入完内容后按ESC键,键盘输入  :wq   可以保存并退出 ...

  9. jQuery的入口函数

    原生的JS的入口函数指的是:window.onload = function(){}: 如下所示: //原生js的入口函数.页面上所有内容加载完毕, 才执行.//不仅要等文本加载完毕, 而且要等图片也 ...

  10. MySQL认识索引

    什么是索引? 索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应该是对查询 ...