1343:大小为k且平均值大于等于阈值的子数组数目
class Solution {
public:
int numOfSubarrays(vector<int>& arr, int k, int threshold) {
int ant=0;int q[100005],hh=0,tt=-1;
int sum=0;
for(int i=0;i<arr.size();i++)
{
if(hh<=tt&&i-hh+1>k)
{
sum-=q[hh];hh++;
}
q[++tt]=arr[i]; sum+=q[tt];
if(i>=k-1&& sum/k>=threshold)ant++;
}
return ant;
}
};
class Solution {
public:
vector<int> getAverages(vector<int>& nums, int k) {
vector<int> ans(nums.size(),-1);
int q[100005],tt=-1,hh=0;long long ant=0;
if(k==0)return nums;
for(int i=0;i<nums.size();i++)
{
if(hh<=tt && i-hh+1>2*k+1)
{
ant-=q[hh];hh++;
}
q[++tt]=nums[i];ant+=q[tt];
if(i>=2*k)ans[i-k]=ant/(2*k+1);
}
return ans;
}
};
1052.爱生气的书店老板
class Solution {
public:
int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes) {
int ant=0; int ma=0 ,sum=0;
int q[20000],hh=0,tt=-1;
for(int i=0;i<grumpy.size();i++)
{
int statu=grumpy[i];
if(statu==0){
sum+=customers[i];
continue;}
while(hh<=tt&&i-q[hh]+1>minutes)
{
ant-=customers[q[hh]];hh++;
}
q[++tt]=i;ant+=customers[i];
ma=max(ant,ma);
}
return sum+ma;
}
};
class Solution {
public:
long long maxSum(vector<int>& nums, int ma, int k) {
unordered_map<int,int> m;
long long sum=0,ant=0;
for(int i=0;i<k-1;i++)
{
sum+=nums[i];
m[nums[i]]++;
}
for(int i=k-1;i<nums.size();i++)
{
sum+=nums[i];
m[nums[i]]++;
if(m.size()>=ma)
ant=max(ant,sum);
sum-=nums[i-k+1];
if(--m[nums[i-k+1]]==0)
m.erase(nums[i-k+1]);
}
return ant;
}
};
class Solution {
public:
long maximumSubarraySum(vector<int>& nums, int k) {
long long ant=0,sum=0;
unordered_map<int,int> m;
for(int i=0;i<k-1;i++)
{
sum+=nums[i];
m[nums[i]]++;
}
for(int i=k-1;i<nums.size();i++)
{
sum+=nums[i];
m[nums[i]]++;
if(m.size()==k)ant=max(ant,sum);
sum-=nums[i-k+1];
if(--m[nums[i-k+1]]==0)m.erase(nums[i-k+1]);
}
return ant;
}
};
1423:可获得的最大点数
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int l=cardPoints.size();
long long zsum=0;
for(int i=0;i<l;i++)zsum+=cardPoints[i];
if(k==l)return zsum;
int len=l-k;
long long sum=0,ant=2000000000;
for(int i=0;i<len-1;i++)
{
sum+=cardPoints[i];
}
for(int i=len-1;i<l;i++)
{
sum+=cardPoints[i];
ant=min(ant,sum);
sum-=cardPoints[i-len+1];
}
return zsum-ant;
}
};
class Solution {
public:
int minSwaps(vector<int>& nums) {
int l=0; int len=nums.size();
for(auto i:nums)if(i)l++;
int ant=10000000,sum=0;
if(l==0 ||l==len)return 0;
//先判断有多少0或1
for(int i=0;i<l-1;i++)
if(nums[i]==0)sum++;
//先算一遍遍历最小
for(int i=l-1;i<nums.size();i++)
{
if(nums[i]==0)sum++;
ant=min(sum,ant);
if(nums[i-l+1]==0)sum--;
}
//算循环的
for(int j=0,i=(len-l+1)%len;j<nums.size();j++,i=(i+1)%len)
{
if(nums[j]==0)sum++;
ant=min(sum,ant);
if(nums[i]==0)sum--;
}
return ant;
}
};
class Solution {
public:
vector<int> getSubarrayBeauty(vector<int>& nums, int k, int x) {
vector<int> ans; int l=nums.size();
int Bias=50;int val[200]={0};
for(int i=0;i<k-1;i++)
{
val[nums[i]+Bias]++;
}
for(int i=k-1;i<l;i++)
{
val[nums[i]+Bias]++;int tag=0;
for(int j=0;j<50;j++)
{
if(val[j])tag+=val[j];
if(tag>=x){ans.push_back(j-50);break;}
}
if(tag<x)
{
ans.push_back(0);
}
val[nums[i-k+1]+Bias]--;
}
return ans;
}
};
class Solution {
public:
bool checkInclusion(string s1, string s2) {
int val[30]; int v[30];
int l1=s1.size(),l2=s2.size();
if(l1>l2)return 0;
for(int i=0;i<l1-1;i++)
{
val[s1[i]-'a']++;
v[s2[i]-'a']++;
}
val[s1[l1-1]-'a']++;
for(int i=l1-1;i<l2;i++)
{
int f=1;
v[s2[i]-'a']++;
for(int j=0;j<30;j++)
{
if(val[j]!=v[j]){f=0;break;}
}
if(f) return 1;
v[s2[i-l1+1]-'a']--;
}
return 0;
}
};
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> ans;
int ls = s.size(), lp = p.size();
int vs[30] = {0}, vp[30] = {0};
if (lp > ls)
return {};
for (int i = 0; i < p.size() - 1; i++) {
vs[s[i] - 'a']++;
vp[p[i] - 'a']++;
}
vp[p[lp - 1] - 'a']++;
for (int i = lp - 1; i < ls; i++) {
vs[s[i] - 'a']++;
int f = 1;
for (int j = 0; j < 30; j++) {
if (vs[j] != vp[j]) {
f = 0;
break;
}
}
if (f)
ans.push_back(i-lp+1);
vs[s[i - lp + 1] - 'a']--;
}
return ans;
}
};
class Solution {
public:
string subStrHash(string s, int power, int modulo, int k, int hashValue) {
long long hash=0,pk=1;int n=s.size();
//开long long 防溢出
for(int i=n-1;i>=n-k;i--)
{
hash=(hash*power+(s[i]&31))%modulo;
pk=pk*power%modulo; //存power的k次幂
}
int ans=hash==hashValue?n-k:0;
for(int i=n-k-1;i>=0;i--)
{
hash=(hash*power+(s[i]&31)-pk*(s[i+k]&31)%modulo+modulo)%modulo;
//先*power再加新入的字符减去划出窗口的字符,注意减法取模方法
if(hash==hashValue)
ans=i;
}
return s.substr(ans,k);
}
};