zoukankan      html  css  js  c++  java
  • LeetCode1217 玩筹码(贪心)

    题目:

    数轴上放置了一些筹码,每个筹码的位置存在数组 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。
     

    提示:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/play-with-chips

    思路:

    贪心:奇数位置与奇数位置之间,都可以通过偶数步到达,也就是可以2步2步的移动过去,花费为0。偶数位置与偶数位置也是同样的道理,所以将所有不同偶数(奇数)位置的筹码移动到同一个位置上的最小花费为0,移动后的结果最终只剩下两堆,一堆位于奇数位置,一堆位于偶数位置。然后再将移动后处于两个不同位置上的筹码移动到同一个位置上,移动一个的最小代价为1,所以最终的答案就是处于奇数位置上和偶数位置上筹码个数的最小数。

    代码:

    import java.util.*;
    import java.math.*;
    
    class Solution {
        public int minCostToMoveChips(int[] chips) {
            int length = chips.length;
            int even = 0, odd = 0;
            for(int i=0; i<length; i++){
                if(chips[i] % 2 == 0) even++;
                if(chips[i] % 2 == 1) odd++;
            }
            return Math.min(even, odd);
        }
    }
    
    public class Main {
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            Solution solution = new Solution();
            int n = scanner.nextInt();
            int[] chips = new int[n];
            for(int i=0; i<n; i++){
                chips[i] = scanner.nextInt();
            }
            System.out.println(solution.minCostToMoveChips(chips));
        }
    }
  • 相关阅读:
    在Node.js环境下使用npm命令安装OpenLayers6.4.3时,提示错误“rollbackFailedOptional: verb npm-session”的解决办法
    Windows7-64环境中部署OpenLayers6.4.3详细步骤
    Navicat 导出csv数据乱码如何处理?
    Win10 如何右键新建.md文件
    关于loading加载的问题
    X度文库越来越不要脸了!
    Layui date 插件 闪烁 无法选择
    每日识字
    如何生成项目目录结构
    小米招聘 hiring
  • 原文地址:https://www.cnblogs.com/sykline/p/12233430.html
Copyright © 2011-2022 走看看