2026/5/13 6:21:12
网站建设
项目流程
网站后台管理模板免费下载,百度一下一下你就知道,深圳网站设计公司怎么找,wordpress主题茶叶按奇偶排序数组
题目理解
题目链接#xff1a;按奇偶排序数组 简而言之就是把数组中所有偶数移到前面#xff0c;奇数移到后面#xff0c;返回任意满足条件的数组即可。
解题思路
双指针交换 用两个指针 l#xff08;从0开始#xff09;和 r#xff08;从l 1 开始按奇偶排序数组简而言之就是把数组中所有偶数移到前面奇数移到后面返回任意满足条件的数组即可。解题思路双指针交换用两个指针l从0开始和r从l 1 开始遍历数组当 r 指向的是偶数且 l 指向的是奇数 → 交换两者当 l 指向的是偶数 → l 右移保证l左侧都是偶数r 不断右移遍历整个数组代码详解classSolution{public:vectorintsortArrayByParity(vectorintnums){intnnums.size();if(n1){// 数组长度为1直接返回returnnums;}intl0;// 左指针指向待交换的奇数位置intrl1;// 右指针遍历数组找偶数while(rn){// 右指针是偶数、左指针是奇数 → 交换if((nums[r]%20)(nums[l]%21)){swap(nums[r],nums[l]);}// 左指针是偶数 → 右移扩大已排序的偶数区域if(nums[l]%20){l;}r;// 右指针继续遍历}returnnums;}};找到字符串中所有字母异位词题目理解题目链接找到字符串中所有字母异位词给定字符串s和p找出 s 中所有是 p 的**字母异位词的子串返回这些子串的起始索引。字母异位词字母相同但排列不同的字符串**解题思路滑动窗口 哈希计数因为只涉及小写字母用两个长度为 26 的数组hash1、hash2分别统计 p 的字母频率、s 滑动窗口内的字母频率。通过维护一个count变量记录窗口中有效匹配的字母数即窗口中该字母的数量 ≤ p 中该字母的数量当count 等于 p的长度时说明当前窗口是 p 的异位词。代码详解classSolution{public:vectorintfindAnagrams(string s,string p){vectorintret;// 存储结果的起始索引inthash1[26]{0};// 统计p的字母频率// 第一步初始化p的字母频率数组for(autoch:p){hash1[ch-a];}inthash2[26]{0};// 统计滑动窗口内的字母频率intcount0;// 记录窗口中有效匹配的字母数intp_lenp.size();// p的长度用于窗口大小控制// 滑动窗口r是右指针l是左指针for(intl0,r0;rs.size();r){charcurs[r];// 右指针扩大窗口将当前字符加入hash2if(hash2[cur-a]hash1[cur-a]){count;// 该字符在p中且数量未超有效匹配数1}// 窗口大小超过p的长度左指针缩小窗口if(r-l1p_len){charouts[l];// 左指针右移弹出窗口左端字符if(hash2[out-a]--hash1[out-a]){count--;// 弹出的字符是有效匹配的有效匹配数-1}}// 有效匹配数等于p的长度说明当前窗口是异位词if(countp_len){ret.push_back(l);// 记录起始索引l}}returnret;}};