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

经典面试题之滑动窗口专题

在这里插入图片描述

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {// 长度最小的子数组 // 大于等于 targetint min_len = INT32_MAX;// 总和int sum = 0;int start  = 0; // 起点for(int i = 0; i< nums.size(); i++) {sum += nums[i];while(sum >= target) {int len = i-start+1;if(len < min_len ) {min_len = len;} sum -= nums[start++];} }if(min_len == INT32_MAX ) {return 0; } else {return min_len;}}
};

3. 无重复字符的最长子串

在这里插入图片描述

class Solution {
public:int lengthOfLongestSubstring(string s) {// 长度int str_size = s.size();if(str_size == 0) {return 0;}int max_len = 0;int left = 0;unordered_set<char> str; // 用来存储 字符for(int i = 0; i< str_size ; i++ ){// 如果没有找到 该字符while(str.find(s[i]) != str.end()) {str.erase(s[left]);left++;}max_len = max(max_len, i- left + 1);// 插入str.insert(s[i]);}return max_len;}
};

76 最小覆盖子串

在这里插入图片描述

class Solution {
public:unordered_map<char,int> tstr, sstr;bool check() {for(auto tchar : tstr) {if(tchar.second > sstr[tchar.first]) {return false;}}return true;}string minWindow(string s, string t) {int n1 = s.size();int n2 = t.size();if(n1 < n2) return "";int len = INT_MAX;int ans_left = -1; // 最小窗口的左边界// 构建哈希表for(auto tchar : t) {tstr[tchar]++;}int left = 0;int right= 0;for(int right = 0; right < n1; right++) {sstr[s[right]]++; // 添加// 说明找到 该字符if(tstr.find(s[right]) != tstr.end()) {// 这里是对比一下 sstr 以及 tstr while(check() && left <= right) {// 长度变化if(len > right-left +1) {// 标记 左边界ans_left = left;len = right - left + 1;    }// 去掉sstr[s[left]]--;// 左边界移动left++;}}}if(ans_left == -1) return "";else return s.substr(ans_left, len);}
};

收获

  1. unordered_map 的基本使用
  2. 滑动窗口模版
  3. auto 基本使用

定义一个字符串的个数哈希表
unordered_map<char, int> sstr, tstr;
简单访问
sstr[s[i]] 这个访问就是对应的个数

int main() {unordered_map<char, int> myMap;unordered_map<char, int> myMap2;myMap['a'] = 1;myMap['b'] = 2;myMap['c'] = 3;myMap2['a'] = 3;myMap2['b'] = 1;myMap2['c'] = 2;// 打印 unordered_map 中的元素for (auto pair : myMap) {cout << pair.first << ": " << pair.second << endl;cout<<myMap2[pair.first]<<endl;cout<<myMap[pair.first]<<endl;}
}
http://www.lryc.cn/news/346886.html

相关文章:

  • 网络编程入门之UDP编程
  • 【AI源码】音频和图片生成你的数字人口播
  • JAVA_3
  • java项目之汽车资讯网站源码(springboot+mysql+vue)
  • C语言中的静态库和动态库的制作和使用
  • 【MySQL 数据宝典】【事务锁】- 002 事务控制的演进
  • 如何远程操作服务器中的Python编译器并将运行结果返回到Pycharm
  • C++入门指南(上)
  • Python 全栈系列244 nginx upstream 负载均衡 踩坑日记
  • 数据链路层——计算机网络学习笔记三
  • leetcode——反转链表
  • 类加载机制(双亲委派机制)
  • nss刷题(2)
  • 2024 年“泰迪杯”A 题:生产线的故障自动识别与人员配置--第四题(用遗传算法解决生产线排班问题--matlab代码)
  • 资产公物仓管理系统|实现国有资产智能化管理
  • 实用的 Google Chrome 命令
  • 动态规划算法:⼦数组、⼦串系列(数组中连续的⼀段)
  • 2010年认证杯SPSSPRO杯数学建模D题(第一阶段)服务网点的分布全过程文档及程序
  • docker-compose 安装ZLMediaKit,ffmpeg、VLC实现推流并播放
  • |Python新手小白中级教程|第二十八章:面向对象编程(类定义语法私有属性类的继承与多态)(4)
  • vue项目基于WebRTC实现一对一音视频通话
  • web 基础之 HTTP 请求
  • 嵌入式 - GPIO编程简介
  • 8种区块链开发者必须知道的顶级编程语言!
  • 十三、Redis哨兵模式--Sentinel
  • [力扣题解]1005. K 次取反后最大化的数组和
  • Web UI自动化测试--PO模式
  • Python进阶之-反射机制详解
  • day05-面向对象内存原理和数组
  • 从头理解transformer,注意力机制(下)