博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] Candy
阅读量:5028 次
发布时间:2019-06-12

本文共 1876 字,大约阅读时间需要 6 分钟。

There are N children standing in a line. Each child is assigned a rating value.

You are giving candies to these children subjected to the following requirements:

  • Each child must have at least one candy.
  • Children with a higher rating get more candies than their neighbors.

What is the minimum candies you must give?

 

思路:扫描两边,第一遍从前往后,如果后一个比前一个大,则糖数增加,否则糖数为1;第二遍扫描,从后向前,如果前一个比后一个大,则前一个值取当前值和右边+1的较大者。

 

public class Solution {    public int candy(int[] ratings) {        if (ratings == null || ratings.length == 0)            return 0;        int res = 0;        int len = ratings.length;        int[] num = new int[len];        num[0] = 1;        for (int i = 1; i < len; i++) {            if (ratings[i] > ratings[i - 1])                num[i] = num[i - 1] + 1;            else                num[i] = 1;        }        res += num[len - 1];        for (int i = len - 2; i >= 0; i--) {            if (ratings[i] > ratings[i + 1])                num[i] = Math.max(num[i + 1] + 1, num[i]);            res += num[i];        }        return res;    }    public static void main(String[] args) {        System.out.println(new Solution().candy(new int[] { 4, 2, 3, 4, 1 }));    }}

 

第二遍记录:

 

第三遍记录:

  如果相邻相等的情况,貌似没有规定,就取最小的情况好了。

  所以第一趟扫描,后续元素比前面大的时候,num增加,否则从1开始。

  第二趟从右向左更新不满足的情况。

public class Solution {    public int candy(int[] ratings) {        int n = ratings.length;        int[] num = new int[n];        num[0]=1;        int res=0;                for(int i=1;i
ratings[i-1]) num[i]=num[i-1]+1; else num[i]=1; } for(int i=n-2;i>=0;i--){ if(ratings[i]>ratings[i+1]){ num[i]=Math.max(num[i],num[i+1]+1); } res +=num[i]; } res +=num[n-1]; return res; }}

 

 

参考:

转载于:https://www.cnblogs.com/jdflyfly/p/3828900.html

你可能感兴趣的文章
web前端java script学习2017.7.18
查看>>
删除TXPlatform
查看>>
LaTex:图片排版
查看>>
并发访问超时的问题可能性(引用)
查看>>
中小团队基于Docker的Devops实践
查看>>
利用python打开摄像头并保存
查看>>
System函数的使用说明
查看>>
Selenium-测试对象操作之:获取浏览器滚动条滚动距离
查看>>
Linux下MySQL数据库安装与配置
查看>>
Extjs String转Json
查看>>
oracle入门(4)——少而常用的命令
查看>>
打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机...
查看>>
Java 虚拟机部分面试题
查看>>
JS中 String/JSON 方法总结
查看>>
二叉树的遍历问题总结
查看>>
3.14-3.20周总结
查看>>
Spring之面向切面编程AOP
查看>>
MATLAB GUI程序设计中使文本框接收多行输入的方法
查看>>
全文检索-Elasticsearch (四) elasticsearch.net 客户端
查看>>
Oracle DBMS_SESSION
查看>>