zoukankan      html  css  js  c++  java
  • 135. 分发糖果

      采用三次遍历,第一次从左到右遍历,将右边大的数字加一,小的减一

      1,2,3,4,3,2,1

      1,2,3,4,1,0,-1

      第二次从右到左,检测小于1的数,然后加上add等于1,然后在递减序列中都加上add

      1,2,3,4,3,2,1

      最后一遍从左到右检测是否有不满足相邻的分数越大,糖果越多的情况,有的话纠正

      解答完毕

    int candy(vector<int>& ratings) {
        int length = ratings.size();
        if (length < 2)
            return 1;
        vector<int> data(length, 1);
        int sum = 0;
        for (int i = 0; i < length-1; i++)
        {
            if (ratings[i] < ratings[i + 1])
                data[i + 1] = data[i] + 1;
            else if (ratings[i] > ratings[i + 1])
            {
                if (data[i] > 1)
                    data[i + 1] = 1;
                else 
                    data[i + 1] = data[i] - 1;
            }
        }
        for (int j = length - 1; j > 0; j--)
        {
            if (data[j] < 1)
            {
                int add = 1 - data[j];
                while ( j > 0 &&  data[j] + 1 == data[j - 1])
                {
                    data[j] += add;
                    j--;
                }
                data[j] += add;
            }
        }
    
        for (int i = 0; i < length - 1; i++)
        {
            if (ratings[i] > ratings[i + 1] && data[i] <= data[i + 1])
                data[i] = data[i + 1] + 1;
            else if (ratings[i] < ratings[i + 1] && data[i] >= data[i + 1])
                data[i+1] = data[i] + 1;
        }
        for (auto x : data)
            sum += x;
        return sum;
    }

      网上有更好的解法,只需要两次遍历,这里不再累述。

      

  • 相关阅读:
    java图片压缩处理
    RocketMQ启动broker提示 错误:找不到或无法加载主类
    Docker
    openresty (nginx+lua)实现请求过滤
    mybatis-3.4.0 Date类型非空字符串判断bug
    ClickHouse 官方文档
    Flume 搭建遇到的问题
    Hadoop与HDFS
    关于Linux
    mybatis insert 返回主键
  • 原文地址:https://www.cnblogs.com/Oscar67/p/9306990.html
Copyright © 2011-2022 走看看