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

常见面试题——滑动窗口算法

按奇偶排序数组

题目理解

题目链接:按奇偶排序数组

简而言之就是把数组中所有偶数移到前面,奇数移到后面,返回任意满足条件的数组即可。

解题思路

双指针交换
用两个指针l(从0开始)和r(从l+ 1 开始)遍历数组:

  • 当 r 指向的是偶数,且 l 指向的是奇数 → 交换两者
  • 当 l 指向的是偶数 → l 右移(保证l左侧都是偶数)
  • r 不断右移遍历整个数组

代码详解

classSolution{public:vector<int>sortArrayByParity(vector<int>&nums){intn=nums.size();if(n==1){// 数组长度为1,直接返回returnnums;}intl=0;// 左指针,指向待交换的奇数位置intr=l+1;// 右指针,遍历数组找偶数while(r<n){// 右指针是偶数、左指针是奇数 → 交换if((nums[r]%2==0)&&(nums[l]%2==1)){swap(nums[r],nums[l]);}// 左指针是偶数 → 右移,扩大已排序的偶数区域if(nums[l]%2==0){l++;}r++;// 右指针继续遍历}returnnums;}};

找到字符串中所有字母异位词

题目理解

题目链接:找到字符串中所有字母异位词

给定字符串sp,找出 s 中所有是 p 的**字母异位词的子串,返回这些子串的起始索引。
(字母异位词:
字母相同但排列不同的字符串**)

解题思路

滑动窗口 + 哈希计数

因为只涉及小写字母,用两个长度为 26 的数组(hash1、hash2)分别统计 p 的字母频率、s 滑动窗口内的字母频率。通过维护一个count变量,记录窗口中有效匹配的字母数(即窗口中该字母的数量 ≤ p 中该字母的数量),当count 等于 p的长度时,说明当前窗口是 p 的异位词。

代码详解

classSolution{public:vector<int>findAnagrams(string s,string p){vector<int>ret;// 存储结果的起始索引inthash1[26]={0};// 统计p的字母频率// 第一步:初始化p的字母频率数组for(autoch:p){hash1[ch-'a']++;}inthash2[26]={0};// 统计滑动窗口内的字母频率intcount=0;// 记录窗口中有效匹配的字母数intp_len=p.size();// p的长度,用于窗口大小控制// 滑动窗口:r是右指针,l是左指针for(intl=0,r=0;r<s.size();r++){charcur=s[r];// 右指针扩大窗口:将当前字符加入hash2if(++hash2[cur-'a']<=hash1[cur-'a']){count++;// 该字符在p中且数量未超,有效匹配数+1}// 窗口大小超过p的长度,左指针缩小窗口if(r-l+1>p_len){charout=s[l++];// 左指针右移,弹出窗口左端字符if(hash2[out-'a']--<=hash1[out-'a']){count--;// 弹出的字符是有效匹配的,有效匹配数-1}}// 有效匹配数等于p的长度,说明当前窗口是异位词if(count==p_len){ret.push_back(l);// 记录起始索引l}}returnret;}};
http://www.rkmt.cn/news/94290.html

相关文章:

  • 世界模型 AI:认知跃迁的可行性与本质性挑战
  • 6、Puppet资源使用全解析
  • python_基于主视频删减片段并插入镜头视频
  • 2、Puppet入门:自动化配置管理解决方案
  • 3、使用Puppet创建首个清单及资源管理指南
  • 免费编程体验课寻课指南:优质平台与选择策略 - 品牌测评鉴赏家
  • 比手动快10倍!AI生成el-form-item代码实测
  • 4、使用Git管理Puppet代码
  • AI一键配置:用快马自动下载安装MinGW-w64环境
  • 23、跨平台系统管理与自动化脚本实践
  • 传统文件管理vsAlist:效率对比实测
  • AI自动解决iframe跨域问题:快马平台一键生成解决方案
  • Collections.singletonList在电商系统开发中的妙用
  • 8、Puppet编程:变量、表达式与系统信息的运用
  • bcryptjs是什么、加密和对比过程是怎样的(初级版)
  • SQL Server日期转换:传统方法与AI辅助效率对比
  • AI助力SQL Server 2016安装:自动生成安装脚本与配置指南
  • 【开题答辩全过程】以 雇主险信息管理系统为例,包含答辩的问题和答案
  • Python打印输出换行
  • 车辆MPC轨迹跟踪控制:双移线轨迹的追逐之旅
  • 3分钟原型开发:构建数组维度验证工具
  • AI如何帮你一键生成完美的JS深拷贝代码?
  • model.add
  • U盘无法访问:文件目录损坏且无法读取(上篇)
  • 企业级TLS升级实战:从TLSv1到TLSv1.2迁移指南
  • 探索MPC在电力电子与控制领域的奇妙之旅
  • 5分钟学会处理invalid_user_scode错误
  • 无刷直流电机模糊控制:Sfunction 函数与隶属度函数的奇妙之旅
  • 【开题答辩全过程】以 高校教材征订系统设计与开发为例,包含答辩的问题和答案
  • 我一个老运维,为啥把原版 Ubuntu 彻底卸了,换成这仨“亲儿子”