分发糖果
分发糖果
思路
题目要求和相邻的孩子比较,相邻的孩子有两个,左边的和右边的。
一次遍历解决两边的孩子,容易顾此失彼,所以可以分两次遍历。
正序遍历时考虑左边的孩子(当前节点左边的),如果ratings[i]>ratings[i-1],那么candys[i] = candys[i-1]+1。
逆序遍历考虑右边的孩子(当前节点右边的),如果ratings[i] > ratings[i+1],那么
candys[i] = Math.max(candys[i], candys[i+1]+1)。
正序遍历做的事儿和反序遍历做的事儿不能对调,因为正序时,当前元素的左边元素一定时都处理过的,这样不会出错。反之逆序时,当前节点的右边节点也都处理过,不会出错。
求解
1 | var candy = function(ratings) { |