zoukankan      html  css  js  c++  java
  • 1217. 玩筹码

    1217. 玩筹码

    描述:

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

     1 解法1:    4 ms    8.4 MB
     2 class Solution {
     3 public:
     4     int minCostToMoveChips(vector<int>& chips) {
     5         /*思路:
     6             注意:数轴上,数字相同的代表,在这个位置可以放多个数据
     7                 最后都是移动到两个相近的距离上,x,x+1这样类似的
     8             1:向左或者向右移动两个单位,代价为0
     9             2:下标从x开始,x,x+2,x+2+2,步长为2,都移动到x,代价为0
    10             3:下标从x+1开始,x+1,x+1+2,x+1+2+2,都移动x,步长为2,代价为1 
    11               1 <= chips[i] <= 10^9
    12        假设:把所有偶数都放到一个地方,所有奇数都放到一个地方,记录个数
    13           最后移动到的结果,判断奇数值和偶数值的个数,谁最小即可
    14           就是算奇数和偶数的个数
    15         
    16         */
    17         int sumx=0,sumy=0;
    18         for(auto data:chips){
    19             if(data%2==0) sumx++;
    20             else sumy++;
    21            
    22         }
    23         return min(sumx,sumy);
    24     }
    25 };
     1 解法2:    8 ms    8.9 MB
     2 class Solution {
     3 public:
     4     int minCostToMoveChips(vector<int>& chips) {
     5         /*思路:
     6             注意:数轴上,数字相同的代表,在这个位置可以放多个数据
     7                 最后都是移动到两个相近的距离上,x,x+1这样类似的
     8             1:向左或者向右移动两个单位,代价为0
     9             2:下标从x开始,x,x+2,x+2+2,步长为2,都移动到x,代价为0
    10             3:下标从x+1开始,x+1,x+1+2,x+1+2+2,都移动x,步长为2,代价为1 
    11               1 <= chips[i] <= 10^9
    12        假设:把所有偶数都放到一个地方,所有奇数都放到一个地方,记录个数
    13           最后移动到的结果,判断奇数值和偶数值的个数,谁最小即可
    14           就是算奇数和偶数的个数
    15             
    16         */
    17         int sumx=0,sumy=0;
    18         map<int,int> mp;//定义map键值对,key=数轴下标,val=在这个数轴上的个数
    19         for(auto data:chips) mp[data]++;//初始化个数
    20         map<int,int>::iterator iter=mp.begin();
    21         while(iter!=mp.end()){
    22             if(iter->first%2==0) sumx+=iter->second;
    23             else sumy+=iter->second;
    24             iter++;
    25         }
    26         return min(sumx,sumy);
    27     }
    28 };
  • 相关阅读:
    每日一水 POJ8道水题
    编译和使用 MySQL C++ Connector
    j2ee model1模型完成分页逻辑的实现 详解!
    DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号
    指向结构体变量的指针
    EOSS V3.0 企业运营支撑系统(基于RBAC原理的权限管理)
    MybatisGen1.0 Mybatis JavaBean Mapper生成工具
    The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by
    资源-Android:Android
    软件-开发软件:Android Studio
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/12003043.html
Copyright © 2011-2022 走看看