当前位置: 首页 > news >正文

刷爆Leetcode Day3

leetcode

  • 11.最大连续1的个数III(medium)
  • 12. 将x减到0的最小操作数(medium)
  • 13. 水果成篮(medium)
  • 14. 找到字符串中所有字母异位词(medium)
  • 15. 串联所有单词的⼦串(hard)

11.最大连续1的个数III(medium)

最大连续1的个数III

class Solution {
public:int longestOnes(vector<int>& nums, int k) {//翻转最多k个0可以理解为子数组中最多可以存在k个0,用一个变量标记//滑动数组问题//for块进窗口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) {//题目要求x减去两端区间减到0,要求区间中的元素最少//这道题难点在两端区间并不一定是一个连续的区间,但是我们可以转化成一个连续区间//对数组求和减去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']++;//简单来说就是当区间子串元素个数等于p的个数时,进行for循环的判断(这里是线性的因为字符只有二十六种)//否则不断进出窗口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)

串联所有单词的⼦串

再理解


http://www.mrgr.cn/news/52681.html

相关文章:

  • 远控代码的重构-远控网络编程的设计上
  • SQL优化 - Limit优化
  • 腾讯域名续费的步骤怎么做的? 忘记了注册的用户名和密码
  • 【编程语言】C++ 中 vector 的常用操作方法
  • 10-Python基础编程之函数
  • SpringColoud GateWay 核心组件
  • java_跳转控制语句break
  • 力扣(leetcode)每日一题 3191 使二进制数组全部等于 1 的最少操作次数 I |贪心
  • px、rem、em等单位的区别
  • 【分布式微服务云原生】《解锁分布式锁的奥秘:由来、场景与技术大揭秘》
  • 晶体与晶振的区别
  • 华为杯”第十三届中国研究生数学建模竞赛-B题:具有遗传性疾病和性状的遗传位点分析(附MATLAB代码实现)
  • 【BGA布局布线-熬夜加班整理】
  • 网络编程基础-IO模型深入理解
  • Python酷库之旅-第三方库Pandas(157)
  • vs code 正则提取文本
  • Xamarin学习计划
  • JVM的基础
  • MyBatis Plus
  • Linux中pip安装python包失败原因是缺少python3-dev