Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法
2014-12-14 16:08
836 查看
首先初始化,每个人分得1个糖果
然后从左向右扫描,使得比左边rating大的,分得的糖果多
从右向左扫描,使得比右边rating大的,分得的糖果多
int candy(vector<int> &ratings)
{
int size=ratings.size();
vector<int> num(size,1);
for(int i=1;i<size;i++)
{
if(ratings[i]>ratings[i-1])
num[i]=num[i-1]+1;
}
for(int i=size-2;i>=0;i--)
{
if(ratings[i]>ratings[i+1] && num[i]<=num[i+1])
num[i]=num[i+1]+1;
}
int sum=0;
for(int i=0;i<size;i++)
sum=sum+num[i];
return sum;
}
然后从左向右扫描,使得比左边rating大的,分得的糖果多
从右向左扫描,使得比右边rating大的,分得的糖果多
int candy(vector<int> &ratings)
{
int size=ratings.size();
vector<int> num(size,1);
for(int i=1;i<size;i++)
{
if(ratings[i]>ratings[i-1])
num[i]=num[i-1]+1;
}
for(int i=size-2;i>=0;i--)
{
if(ratings[i]>ratings[i+1] && num[i]<=num[i+1])
num[i]=num[i+1]+1;
}
int sum=0;
for(int i=0;i<size;i++)
sum=sum+num[i];
return sum;
}
相关文章推荐
- Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法
- Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法
- [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现
- [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现
- Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法
- LeetCode 第三题,官方给的标准答案的一个分析,利用空间换时间,将复杂度降到了O(n)
- LeetCode | 442. Find All Duplicates in an Array 限制时间复杂度O(n)空间复杂度O(1)的题
- 算法度量方法——时间复杂度及空间复杂度
- 每天一道LeetCode-----找到序列中第一个没有出现的正整数,要求时间复杂度是O(n),空间复杂度是O(1)
- Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法
- LeetCode 148. Sort List--O(nlogn)时间复杂度和常数空间复杂度给链表排序
- 七种排序方法(稳定性、空间复杂度、时间复杂度)分析总结
- 334.leetcode Increasing Triplet Subsequence(medium)[巧妙的方法减少时间与空间复杂度]
- [LeetCode] Set Matrix Zeroes (!!!!时间空间复杂度)
- 算法的时间复杂度和空间复杂度的求解方法
- 各种排序方法的时间复杂度、空间复杂度和稳定性统计表
- bsd strtok实现和windowstrtok实现 NetBSD的方法是节约了空间,牺牲了时间(它的时间复杂度为N2) 而微软的方法是节约了时间(它的时间复杂度为N),牺牲了空间(开了一
- Leetcode:454. 4Sum II (解决时间和空间复杂度是关键)
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度