码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode#135 Candy

时间:2015-01-20 15:20:03      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

原题地址

 

遍历所有小孩的分数

1. 若小孩的分数递增,分给小孩的糖果依次+1
2. 若小孩的分数递减,分给小孩的糖果依次-1
3. 若小孩的分数相等,分给小孩的糖果设为1

当递减序列结束时,如果少分了糖果,就补上,如果多分了糖果,就减掉

究竟补多少或减多少,这很容易计算,不啰嗦了。

时间复杂度:O(n)

 

代码:

 1 int candy(vector<int> &ratings) {
 2   int n = ratings.size();
 3   int sum = 1;
 4   int len = 0;
 5   int prev = 1;
 6 
 7   for (int i = 1; i < n; i++) {
 8     if (ratings[i] == ratings[i - 1]) {
 9       prev = 1;
10       len = 0;
11       sum += prev;
12     }
13     else if (ratings[i] > ratings[i - 1]) {
14       prev++;
15       len = 0;
16       sum += prev;
17     }
18     else if (ratings[i] < ratings[i - 1]) {
19       prev--;
20       len++;
21       sum += prev;
22       if (i == n - 1 || ratings[i] <= ratings[i + 1]) {
23         sum += prev < 1 ? (1 - prev) * (len + 1) : (1 - prev) * len;
24         prev = 1;
25       }
26     }
27   }
28 
29   return sum;
30 }

 

Leetcode#135 Candy

标签:

原文地址:http://www.cnblogs.com/boring09/p/4236097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!