北尘_:个人主页
个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》
☀️走在路上,不忘来时的初心
文章目录
- 一、将x减到0的最小操作数
-
- 二、无重复的最长子串
-
- 三、最大连续为1的个数
-
- 四、长度最小的子数组
-
一、将x减到0的最小操作数
1、题目讲解
2、讲解算法原理
3、代码实现
class Solution {
public:
int minOperations(vector<int>& nums, int x) {
int n=nums.size(),ret=0,sum=0,target,len=-1;
for(int i=0;i<n;i++)
ret+=nums[i];
target=ret-x;
if(target<0) return -1;
for(int left=0,right=0;right<n;right++)
{
sum+=nums[right];
while(sum>target)
sum-=nums[left++];
if(sum==target)
len=max(len,right-left+1);
}
if(len==-1) return len;
else return n-len;
}
};
二、无重复的最长子串
1、题目讲解
2、讲解算法原理
3、代码实现
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n=s.size();
int count[128]={0},len=0;
for(int left=0,right=0;right<n;right++)
{
count[s[right]]++;
while(count[s[right]]==2)
count[s[left++]]--;
len=max(len,right-left+1);
}
return len;
}
};
三、最大连续为1的个数
1、题目讲解
2、讲解算法原理
3、代码实现
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int n=nums.size(),zero=0,len=0;
for(int left=0,right=0;right<n;right++)
{
if(nums[right]==0) zero++;
while(zero>k)
if(nums[left++]==0) zero--;
}
return len;
}
};
四、长度最小的子数组
1、题目讲解
2、讲解算法原理
3、代码实现
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums)
{
int n=nums.size(),len=INT_MAX;
int sum=0;
for(int left=0,right=0;right<n;right++)
{
sum+=nums[right];
while(sum>=target)
{
len=min(len,right-left+1);
sum-=nums[left];
left++;
}
}
return len==INT_MAX?0:len;
}
};