90 lines
2.6 KiB
C++
90 lines
2.6 KiB
C++
#include<stdcpp.h>
|
|
using namespace std;
|
|
|
|
class Solution{
|
|
public:
|
|
int candy(vector<int>& ratings){
|
|
const int length = ratings.size();
|
|
const int size = 2e4+10;
|
|
vector<int>pref(length, 1);
|
|
vector<int>suff(length, 1);
|
|
for(int i = 1 ; i < length ;i++){
|
|
if(ratings[i] > ratings[i-1])
|
|
pref[i] = pref[i-1] + 1;
|
|
}
|
|
for(int i = length - 2 ; i >= 0 ; i--){
|
|
if(ratings[i] > ratings[i+1])
|
|
suff[i] = suff[i+1] + 1;
|
|
}
|
|
int sum = 0;
|
|
for(int i = 0 ; i < length ;i++)
|
|
sum+=max(pref[i],suff[i]);
|
|
return sum;
|
|
}
|
|
int candy1(vector<int>& ratings){
|
|
const int length = ratings.size();
|
|
const int size = 2e4+10;
|
|
int comparision[size] = {};
|
|
if(ratings[1] > ratings[0])
|
|
comparision[0] = 1;
|
|
else if (ratings[1] == ratings[0])
|
|
comparision[0] = 0;
|
|
else
|
|
comparision[0] = -1;
|
|
int rlt[size] = {};
|
|
for(int i = 1 ; i < length ; i++){
|
|
if(ratings[i] < ratings[i-1]){
|
|
comparision[i] = -1;
|
|
if(rlt[i-1] == 0) {
|
|
rlt[i] = 2;
|
|
// rlt[i-1] = 1;
|
|
}
|
|
else rlt[i] = rlt[i-1] + 1;
|
|
}
|
|
else if(ratings[i] == ratings[i - 1]){
|
|
comparision[i] = 0;
|
|
}
|
|
else{
|
|
comparision[i] = 1;
|
|
}
|
|
}
|
|
for(int i = 1 ; i < length ; i++){
|
|
if(rlt[i] == 0){
|
|
if(comparision[i] == 0)
|
|
rlt[i] = 1;
|
|
else {
|
|
// if(comparision[i-1] == -1)
|
|
// rlt[i] = 2;
|
|
// else
|
|
// rlt[i] = rlt[i-1] + 1;
|
|
if(comparision[i-1] == 1 && rlt[i-1] == 0)
|
|
rlt[i] = 2;
|
|
else if(comparision[i-1] == 1 && rlt[i-1])
|
|
rlt[i] = rlt[i-1] + 1;
|
|
}
|
|
}
|
|
}
|
|
for(int i = 0 ; i <length;i++)
|
|
if(!rlt[i]) rlt[i] = 1;
|
|
int sum = 0;
|
|
for(int i = 1; i < length ; i++){
|
|
sum += rlt[i];
|
|
cout<<rlt[i]<<' ';
|
|
}
|
|
cout<<endl;
|
|
sum+=1;
|
|
return sum;
|
|
}
|
|
};
|
|
int main(){
|
|
Solution sol;
|
|
vector<int> ex1 = {1,0,2};
|
|
cout<<sol.candy(ex1)<<endl;
|
|
vector<int> ex2 = {1,2,2};
|
|
cout<<sol.candy(ex2)<<endl;
|
|
vector<int> ex3 = {4,1,4,3,2,1,5,8,7,5,2};
|
|
cout<<sol.candy(ex3)<<endl;
|
|
vector<int> ex4 = {1,3,4,5,2};
|
|
cout<<sol.candy(ex4)<<endl;
|
|
return 0;
|
|
} |