您的位置:首页 > 其它

leetcode-135. Candy

2017-11-06 16:02 274 查看

考察点

贪心

思路

从左往右扫描一遍,贪心一次;然后从右往左扫描一遍,当当前位ratings小于左边一位ratings并且当前为nums大于左边一位nums时,要将左边一位赋值为当前位nums+1.

C++代码

class Solution {
public:
int candy(vector<int>& ratings) {
int size = ratings.size();
vector<int> nums(ratings.size(), 1);
int sum = 0;
for (int i=1; i<size; i++) {
if (ratings[i] > ratings[i-1]) {
nums[i] = nums[i-1] + 1;
}
}
for (int i = size - 1; i >0; i--) {
if (ratings[i] < ratings[i-1] && nums[i] >= nums[i-1])
nums[i - 1] = nums[i] + 1;
}
for (int i=0; i<size; i++) {
//cout<<nums[i]<<" ";
sum += nums[i];
}
return sum;
}
};


python代码:

class Solution:
def candy(self, ratings):
"""
:type ratings: List[int]
:rtype: int
"""
num_list = [1] * len(ratings)
for  i in range(len(ratings) - 1):
if ratings[i+1] > ratings[i]:
num_list[i+1] = num_list[i] + 1
for i in  range(len(ratings)-2, -1, -1):
if ratings[i] > ratings[i+1] and num_list[i] <=num_list[i+1]:
num_list[i] = num_list[i+1] + 1
return sum(num_list)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: