zoukankan      html  css  js  c++  java
  • (动态规划)最小分糖果问题

    • 题目:
      有N个孩子站在一排。 每个孩子被分配一个评分值。
      
      你给这些孩子的糖果满足以下要求:
      
           每个孩子必须有至少一个糖果。
           评分较高的孩子比他们的邻居获得更多的糖果。
      
      你必须给的最低糖果是什么?


    • 题目分析:这个题目其实就是简单的遍历问题。一个打乱的数组,每个数字都有一个特定的属性值,相邻两个数字大的数字比小的数字的属性值大。我们可以一次遍历 搞定,不过有点繁琐;这里我先从左边一次遍历处理大的值,然后右边遍历一次处理大的值(类似处理小的值),这样比较清晰。
    • 代码:
      class Solution {
      public:
          int candy(vector<int> &ratings) {
              int len = ratings.size();
              if (len == 1)
                  return 1;
              //从左边遍历   升序  找到大的就加1
              vector<int> res(len, 1);
              int sum = 0;
              for (int i=0; i<len-1; i++){
                  if (ratings[i+1] > ratings[i])
                      res[i+1] = res[i]+1;
              }
              //在从右边遍历 升序  找到大的  加1
              //两次遍历类似于一次遍历两次判断。这样比较清晰
              for (int j=len-1; j>0; j--){
                  if (ratings[j-1] > ratings[j] && res[j-1]<=res[j])
                      res[j-1] = res[j]+1;
              }
              
              for (int i=0; i<len; i++){
                  sum += res[i];
              }
              return sum;
          }
      };
  • 相关阅读:
    Nginx无缝升级
    ajax form提交的问题
    Ubuntu下pecl_http的安装
    提高PHP的运行效率的方法
    php.ini中文对照
    类似 TP中 eq 标签
    PHP身份证验证程序
    mysql在php中的应用
    如何添加JavaScript到Joomla模板中去
    USACO / Controlling Companies (类似BFS)
  • 原文地址:https://www.cnblogs.com/Kobe10/p/6367045.html
Copyright © 2011-2022 走看看