11.最大连续1的个数III(medium)
最大连续1的个数III
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int ret=0;
for(int right=0,left=0,count=0,n=nums.size();right<n;right++)
{
if(nums[right]==0)count++;
while(count>k)
{
if(nums[left]==0)count--;
left++;
}
ret=ret>right-left+1?ret:right-left+1;
}
return ret;
}
};
12. 将x减到0的最小操作数(medium)
将x减到0的最小操作数
class Solution {
public:
int minOperations(vector<int>& nums, int x) {
int sum=0;
int ret=-1;
int n=nums.size();
for(auto ch:nums)
sum+=ch;
int target=sum-x;
if(target<0)
return -1;
for(int left=0,right=0,sub_sum=0;right<n;right++)
{
sub_sum+=nums[right];
while(sub_sum>target)
{
sub_sum-=nums[left];
left++;
}
if(sub_sum==target)
ret=ret>right-left+1?ret:right-left+1;
}
return ret==-1?-1:n-ret;
}
};
13. 水果成篮(medium)
水果成篮
class Solution {
public:
int totalFruit(vector<int>& fruits) {
int hash[100000] ={0};
int len=0;
for(int left=0,right=0,kind=0;right<fruits.size();right++)
{
if(hash[fruits[right]]==0)
kind++;
hash[fruits[right]]++;
while(kind>2)
{
hash[fruits[left]]--;
if(hash[fruits[left]]==0)
kind--;
left++;
}
len=len>right-left+1?len:right-left+1;
}
return len;
}
};
14. 找到字符串中所有字母异位词(medium)
找到字符串中所有字母异位词
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> ret;
int hash1[26]={0};
int hash2[26]={0};
for(auto ch:p)
hash1[ch-'a']++;
for(int right=0,left=0;right<s.size();right++)
{
hash2[s[right]-'a']++;
while(right-left+1>p.size())
{
hash2[s[left]-'a']--;
left++;
}
for(int i=0;i<26;i++)
{
if(hash1[i]!=hash2[i])
break;
else if(i==25)
ret.push_back(left);
}
}
return ret;
}
};
15. 串联所有单词的⼦串(hard)
串联所有单词的⼦串
class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words) {
vector<int> ret;
map<string,int>src;
for(auto s:words)
src[s]++;
int gap=words[0].size(),group=words.size();
for(int i=0;i<gap;i++)
{
map<string,int>des;
for(int left=i,right=i,count=0;right+gap<=s.size();right+=gap)
{
string in=s.substr(right,gap);
des[in]++;
if(des[in]<=src[in])count++;
if(right-left+1>gap*group)
{
string out=s.substr(left,gap);
if(des[out]<=src[out])count--;
des[out]--;
left+=gap;
}
if(count==group)
ret.push_back(left);
}
}
return ret;
}
};