脚撕LeetCode(1217)Easy

2022-01-18 08:06:49 浏览数 (1)

题目地址:https://leetcode-cn.com/problems/minimum-cost-to-move-chips-to-the-same-position/

数轴上放置了一些筹码,每个筹码的位置存在数组chips当中。 你可以对 任何筹码 执行下面两种操作之一(不限操作次数,0 次也可以): 将第 i 个筹码向左或者右移动 2 个单位,代价为 0。 将第 i 个筹码向左或者右移动 1 个单位,代价为 1。 最开始的时候,同一位置上也可能放着两个或者更多的筹码。 返回将所有筹码移动到同一位置(任意位置)上所需要的最小代价。 https://leetcode-cn.com/problems/minimum-cost-to-move-chips-to-the-same-position/

代码语言:javascript复制
示例 1:
输入:chips = [1,2,3]
输出:1
解释:第二个筹码移动到位置三的代价是 1,第一个筹码移动到位置三的代价是 0,总代价为 1。

示例 2:
输入:chips = [2,2,2,3,3]
输出:2
解释:第四和第五个筹码移动到位置二的代价都是 1,所以最小总代价为 2。

提示:
1 <= chips.length <= 100
1 <= chips[i] <= 10^9

https://leetcode-cn.com/problems/minimum-cost-to-move-chips-to-the-same-position/

这道题主要思路是,数组chips[i]存放的是硬币在坐标上的哪个位置。

此时只需要把所有硬币移动到任意一个坐标上即可,移动2位消耗0,移动1位消耗1.那么很容易就引出我们的爆破法

一、爆破法

这里我们直到移动奇数位就要消耗1,移动、偶数位就要消耗0,那么很明显就是看看是奇数位上的硬币个数多还是偶数位置上的硬币个数多,然后移动个数少的去消耗1即可。

执行结果如下:

51 / 51 个通过测试用例

状态:通过

执行用时: 0 ms

内存消耗: 35.7 MB

代码语言:javascript复制
public int minCostToMoveChips(int[] chips) {
    int singleNum = 0;
    int doubleNum = 0;
    for(int chip : chips) {
        if((chip&1) == 0) doubleNum  ;
        else singleNum  ;
    }
    return Math.min(singleNum, doubleNum);
}

这道题评论区里面的答案基本也类似,而且这个答案得到了100%的时间和90 %的空间,也就没有比较深究,毕竟是一道easy题。

0 人点赞