Leetcode|Candy
来源:互联网 发布:ubuntu安装net snmp 编辑:程序博客网 时间:2024/06/05 09:47
There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
Each child must have at least one candy.
Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
开始想到已扫描一遍,每次都看左右两边的邻居,比右边大,又加1了,还得看看是不是比做邻居糖果多了,如果ratings比左邻居小。还得不断再回溯比较左边。超时。
超时的算法:
int candy1(vector<int>& ratings) { int n=ratings.size(); if(n==0) return 0; int sum=0; vector<int> candy(n,1); for(int i=0;i<n;i++){ if(i>0&&ratings[i]>ratings[i-1]){//如果我的级别比前一个人的级别高,我就要比他多一个糖果。 candy[i]=candy[i-1]+1; } if(i<n-1&&ratings[i]>ratings[i+1]){//如果我的级别比后一个人高 if(candy[i]<=candy[i+1]){ candy[i]++; //我就加一个,但是加完之后,可能出现一种情况是,前一个人比我级别高,我却和他一样多。 for(int j=i;ratings[j]<ratings[j-1]&&candy[j]>=candy[j-1]&&j>0;j--){ //那么我就给前一个同学加一个糖果 candy[j-1]++;//我还看前一个 } } } } for(int i=0;i<n;i++) sum+=candy[i]; return sum; }
O(2n)的算法:从左到右,再从右到左扫描。每次只看一边的邻居。
int candy(vector<int>& ratings) { int n=ratings.size(); if(n==0) return 0; int sum=0; vector<int> candy(n,1); for(int i=1;i<n;i++){ if(ratings[i]>ratings[i-1]){//如果我的级别比前一个人的级别高,我就要比他多一个糖果。 candy[i]=candy[i-1]+1; } } for(int i=n-2;i>=0;i--){ if(ratings[i]>ratings[i+1]){//如果我的级别比后一个人高 if(candy[i]<=candy[i+1]){ candy[i]=candy[i+1]+1; } } } for(int i=0;i<n;i++) sum+=candy[i]; return sum; }
0 0
- Leetcode: Candy
- LeetCode:Candy
- [leetcode]Candy
- Leetcode: Candy
- 【leetcode】Candy
- LeetCode:Candy
- [LeetCode] Candy
- [LeetCode]Candy
- [LeetCode] Candy
- 【LeetCode】Candy
- LeetCode | Candy
- Leetcode: Candy
- Candy - LeetCode
- leetcode Candy
- LeetCode Candy
- candy leetcode
- Candy -- LeetCode
- [LeetCode] Candy
- 有道词典
- Linux 系统中用户切换
- VSFTP 登陆很慢的解决方案
- getHibernateTemplate().find java.lang.NullPointerException
- cordic算法的总结和verilog代码的编写
- Leetcode|Candy
- Android中Application类用法
- iOS ARC MRC情况下重写setter getter方法
- 日经社説 20150703 郵政3社は収益向上の道筋を市場に示せ
- IOS 推送详解
- 社説 20150703 アジア投資銀 中国の「独善」へ懸念が増した
- 创建循环单链表(头插法)
- 先来吐个槽~
- 算法导论习题(python)Chapter One