首页 > 代码库 > LeetCode之小孩分糖果
LeetCode之小孩分糖果
给定一群站好队的小孩并且按某项分值排名(姑且假设为年龄吧),年龄大的要比他身边年龄小的拿的糖要多,求怎么分配糖果使得分配的糖果数最少。
用一个数组从左到右再从右到左的遍历,向前遍历时若右边的比左边的大则其值为前一个糖果数+1,向后遍历时则判断如果比后面的小孩的年龄要大且糖果数比其还少则更改其糖果数为后面小孩分的糖果数+1.
具体描述代码:
#include<iostream> #include<vector> using namespace std; int candy(vector<int> &a){ int len=a.size(); if(len==0||len==1) return len; int sum=0; int *candys = new int[len]; candys[0]=1; for(int i=1;i<len;i++) { if(a[i]>a[i-1]) candys[i]=candys[i-1]+1; else candys[i]=1; } sum=candys[len-1]; for(int i=len-2;i>=0;i--) { if( a[i]>a[i+1] && ( candys[i+1]+1 > candys[i] )) candys[i]=candys[i+1]+1; sum+=candys[i]; } return sum; } int main() { int Array[]={4,2,3,4,1}; vector<int> c(Array,Array+5); cout<<candy(c)<<endl; }
LeetCode之小孩分糖果
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。