135 need to use prefix array and suffix array method to solve the probelm

This commit is contained in:
mhrooz 2023-11-30 15:00:08 +01:00
parent 9bcda808e5
commit 5dbc1f093a
2 changed files with 90 additions and 0 deletions

90
135-231130-pass/main.cpp Normal file
View File

@ -0,0 +1,90 @@
#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;
}