135. Candy
Posted 我的名字叫周周
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了135. Candy相关的知识,希望对你有一定的参考价值。
/* * 135. Candy * 12.31 by Mingyang * 无论是水坑还是得到糖的小朋友,影响因素都不只一边,都是左右两边的最小值/最大值来决定的。 * 所以这道题跟上一道一样,也是左右两边遍历数组。 * leftnums数组存从左边遍历,当前小朋友对比其左边小朋友,他能拿到糖的数量; * rightnums数组存从右边遍历,当前小朋友对比其右边小朋友,他能拿到的糖的数量。 * 最后针对这两个数组,每个小朋友能拿到的糖的数量就是这两个数最大的那个数,求总加和就好了。 * 关键点:我开始自己做的时候,找到那个凹进去的点,然后赋予一个为1的值在里面,然后把neighbor全部赋值 * 那么做cornor case太多了,所以不行 * 现在我就重新学习一种新的方法,就是左右两边扫一遍就好了 */ public int candy(int[] ratings) { if(ratings==null || ratings.length==0) return 0; int[] leftnums = new int[ratings.length]; int[] rightnums = new int[ratings.length]; leftnums[0]=1; for(int i=1;i<ratings.length;i++){ if(ratings[i]>ratings[i-1]) leftnums[i] = leftnums[i-1]+1; else leftnums[i] = 1; } rightnums[ratings.length-1] = leftnums[ratings.length-1]; for(int i=ratings.length-2;i>=0;i--){ if(ratings[i]>ratings[i+1]) rightnums[i] = rightnums[i+1]+1; else rightnums[i] = 1; } int res = 0; for(int i = 0; i<ratings.length; i++) res += Math.max(leftnums[i],rightnums[i]); return res; }
以上是关于135. Candy的主要内容,如果未能解决你的问题,请参考以下文章