对于ratings[i+1],和ratings[i]的关系有下面几种:

1. 相等。相等时ratings[i+1]相应的糖果数为1

2.ratings[i + 1] > ratings[i]。在这样的情况下,要寻找以ratings[i]開始的递增序列。

3.ratings[i + 1] < ratings[i]。在这样的情况下,要寻找以ratings[i]開始的递减序列。

对于随意一个递增序列 [2 3 4 5 6] 相应的糖果数为 [1 2 3 4 X]

对于随意一个递减序列[6 5 4 3 2]相应的糖果数为[X 4 3 2 1]

X为递增和递减序列交际处的元素相应糖果数。应该是递增序列长度和递减序列长度中较大的值

代码例如以下:

    int candy(vector<int> &ratings) {
if (ratings.size() == 0) return 0;
int sum = 0;
int candyNum = 1;
for (int i = 0; i < ratings.size() - 1;)
{
if (ratings[i] == ratings[i + 1])
{
//if is the same rating, reset candy num. ie: 1 3 3, for the 2nd 3, candy num is 1
sum += candyNum;//add current candy num
i++;
candyNum = 1;//set next candy num to 1
}
else if (ratings[i] < ratings[i + 1])
{
// find ascending sequence, until i is the end of sequence. ie: 1 2 3 1, ratings[i] is 3
for (;i < ratings.size() - 1 && ratings[i] < ratings[i + 1]; i++) sum += (candyNum++);
}
else if (ratings[i] > ratings[i + 1])
{
// find descending sequence, until i is the end of sequence. ie: 3 2 1 3, rating[i] is 1
int decCount = 1;
for (; i < ratings.size() - 1 && ratings[i] > ratings[i + 1]; i++) sum += (decCount++);
sum += max(candyNum, decCount);//add first element of the sequence
//remove last element of the sequence, as i is the end of sequence, and i's candy num shouldn't be calculated into sum
sum --;
candyNum = 1;
}
}
sum += candyNum;
return sum;
}

Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法的更多相关文章

  1. [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现

    [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现 原题: There are N children standing in a line. ...

  2. 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题

    先看看这个题目:某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C代码求出这两个单身整数. 要求: 时间复杂度o(n), 空间复杂度o(1). 我们先用最傻瓜的方式来做吧: #inc ...

  3. [LeetCode][Java]Candy@LeetCode

    Candy There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  4. 时间复杂度On和空间复杂度O1是什么意思?

    (1).把输入规模看成x轴,所花时间/空间看成y轴 O(n)就是y=x,y随x的增长而线性增长.也就是成正比,一条斜线. O(1)就是y=1,是一个常量,不管x怎么变,y不变,一条与x轴平行的线. ( ...

  5. *candy——leetcode

    /* */ #include<iostream> #include<vector> //#include<algorithm> #include <windo ...

  6. Candy leetcode java

    题目: There are N children standing in a line. Each child is assigned a rating value. You are giving c ...

  7. candy leetcode C++

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  8. 反转链表,时间复杂度O(n),空间复杂度O(1)

    原理:使用三个指针,p,q指向交换的元素,r指向后续元素 代码如下: class Node{ int data; Node next; Node(int data){ this.data=data; ...

  9. 时间复杂度O(n),空间复杂度O(1)解斐波那契数列

    #include <stdio.h> #include <iostream> using namespace std; long long fibs1(int in_iN) { ...

随机推荐

  1. SPOJ 1811 SAM 初探

    思路: 一个串建SAM 另一个串在SAM上跑 //By SiriusRen #include <cstdio> #include <cstring> #include < ...

  2. Highcharts Highstock 学习笔记 第一篇 Highcharts配置

    Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达 ...

  3. 自己做的一个android 音视频播放器

    欢迎大家下载: http://download.csdn.net/detail/q610098308/8504335

  4. linux如何更改yum源

    更改linux yum源方法:第一步:进入yum配置文件目录:cd /etc/yum.repos.d/第二步:备份配置文件(如果后续出现了问题就可以恢复):mv CentOS-Base.repo Ce ...

  5. [转]linux sudo 命令

    转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/11/2245341.html “Sudo”是Unix/Linux平台上的一个 ...

  6. 我正在学英语是用learning english还是用studying english?

    学一门语言用 learn. study 表示深入研究,一般指在大学里.如果大学里的专业是英语,就可以说 study English. 1. If you study hard, you will le ...

  7. 6.10---springboot的配置

  8. iOS- Size Class使用教程

    1:它引入了一种新的概念,抛弃传统意义上我们适配时所谓的具体宽高尺寸,把屏幕的宽和高分别分成两种情况:Compact-紧凑, Regular-正常(Any-任意,其实就是这2种的组合,所以我没分成3种 ...

  9. tomcat报错org.springframework.web.context.ContextLoaderListener找不到

    tomcat报错org.springframework.web.context.ContextLoaderListener找不到. 最后解决办法:将jar包copy到web-inf下面的lib中. 你 ...

  10. ASLR(Address space layout randomization)地址空间布局随机化

    /*********************************************************************  * Author  : Samson  * Date   ...