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 };
  • 相关阅读:
    CentOS7.2中安装MongoDB
    django 面试题
    python pandas库——pivot使用心得
    归并排序
    python实现归并排序,归并排序的详细分析
    二分法查找
    二叉树的遍历
    RabbitMQ(python实现)学习之一:简单两点传输“Hello World”的实现
    邻接表存储图,DFS遍历图的java代码实现
    五、python使用模块
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/12003043.html
Copyright © 2011-2022 走看看