​LeetCode 135 Candy​

思路:

将数组排序。然后根据值从小到大,在数组中依次标记值。

c++

class Solution {
public:
int can[100005];
int a[100005];
vector<int> b[100005];
int tag[100005];
int candy(vector<int>& ratings) {

int l=ratings.size();
int ans=0;
memset(vis,0,sizeof(vis));
for(int i=0;i<l;i++)
{
a[i]=ratings[i];
}
sort(a,a+l);
int rank=0;
for(int i=0;i<l;i++)
{
if(tag[a[i]]==0)
tag[a[i]]=++rank;
}
for(int i=0;i<l;i++)
{
b[tag[ratings[i]]].push_back(i);
}
for(int i=1;i<=rank;i++)
{
for(int k=0;k<b[i].size();k++)
{
int j=b[i][k];
int x=1,y=1;
if(j-1>=0&&can[j-1]!=0)
{
if(ratings[j-1]==ratings[j])
x = 1;
else
x=can[j-1]+1;

}
if(j+1<l&&can[j+1]!=0)
{
if(ratings[j+1]==ratings[j])
y=1;
else
y=can[j+1]+1;
}

can[j]=max(x,y);
ans+=can[j];
}

}

return ans;
}
};