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

网站彩票怎么做/排名优化公司哪家效果好

网站彩票怎么做,排名优化公司哪家效果好,网站开发 毕业设计,网站重新建设的申请书什么是滑动窗口算法 滑动窗口算法(Sliding Window Algorithm)是一种用于处理数组或列表子区间问题的高效技巧。它通过维护一个大小可变或固定的"窗口"在数据结构上滑动,从而避免不必要的重复计算,将许多嵌套循环的问题…

什么是滑动窗口算法

滑动窗口算法(Sliding Window Algorithm)是一种用于处理数组或列表子区间问题的高效技巧。它通过维护一个大小可变或固定的"窗口"在数据结构上滑动,从而避免不必要的重复计算,将许多嵌套循环的问题转化为单循环问题,显著降低时间复杂度。

滑动窗口的适用场景

滑动窗口算法通常适用于解决以下类型的问题:

  • 寻找满足某种条件的子数组/子字符串
  • 计算子数组/子字符串的最值或平均值
  • 涉及连续元素的问题
  • 需要优化嵌套循环为单循环的问题

滑动窗口的基本思想

滑动窗口算法的核心思想是维护一个窗口,该窗口通常由两个指针(左指针和右指针)表示。通过调整这两个指针的位置来扩大或缩小窗口,同时根据问题需求更新计算结果。

滑动窗口的两种类型

1. 固定大小的滑动窗口

窗口大小在滑动过程中保持不变,通常用于计算固定长度子数组的相关问题。

2. 可变大小的滑动窗口

窗口大小会根据特定条件动态调整,通常用于寻找满足特定条件的最长子数组或最短子数组。

C++实现示例

示例1:固定大小滑动窗口 - 计算大小为k的子数组的最大和

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int maxSumSubarray(const vector<int>& nums, int k) {if (nums.size() < k) return -1; // 处理异常情况int max_sum = 0;// 计算初始窗口的和for (int i = 0; i < k; ++i) {max_sum += nums[i];}int window_sum = max_sum;// 滑动窗口for (int i = k; i < nums.size(); ++i) {window_sum += nums[i] - nums[i - k]; // 加上新元素,减去旧元素max_sum = max(max_sum, window_sum);}return max_sum;
}int main() {vector<int> nums = {1, 4, 2, 10, 2, 3, 1, 0, 20};int k = 4;cout << "Maximum sum of a subarray of size " << k << " is " << maxSumSubarray(nums, k) << endl;return 0;
}

示例2:可变大小滑动窗口 - 无重复字符的最长子字符串

#include <iostream>
#include <string>
#include <unordered_set>
#include <algorithm>using namespace std;int lengthOfLongestSubstring(const string& s) {unordered_set<char> char_set;int left = 0, max_len = 0;for (int right = 0; right < s.size(); ++right) {// 如果当前字符已经存在于集合中,移动左指针while (char_set.find(s[right]) != char_set.end()) {char_set.erase(s[left]);++left;}// 插入当前字符char_set.insert(s[right]);// 更新最大长度max_len = max(max_len, right - left + 1);}return max_len;
}int main() {string s = "abcabcbb";cout << "Length of the longest substring without repeating characters: "<< lengthOfLongestSubstring(s) << endl;return 0;
}

示例3:可变大小滑动窗口 - 最小覆盖子串

#include <iostream>
#include <string>
#include <unordered_map>
#include <climits>using namespace std;string minWindow(string s, string t) {unordered_map<char, int> target_counts;for (char c : t) {target_counts[c]++;}int required = target_counts.size();int formed = 0;int left = 0;int min_len = INT_MAX;int start_idx = 0;unordered_map<char, int> window_counts;for (int right = 0; right < s.size(); ++right) {char c = s[right];window_counts[c]++;if (target_counts.count(c) && window_counts[c] == target_counts[c]) {formed++;}while (formed == required && left <= right) {// 更新最小窗口if (right - left + 1 < min_len) {min_len = right - left + 1;start_idx = left;}// 尝试缩小窗口char left_char = s[left];window_counts[left_char]--;if (target_counts.count(left_char) && window_counts[left_char] < target_counts[left_char]) {formed--;}left++;}}return min_len == INT_MAX ? "" : s.substr(start_idx, min_len);
}int main() {string s = "ADOBECODEBANC";string t = "ABC";cout << "Minimum window substring: " << minWindow(s, t) << endl;return 0;
}

滑动窗口算法的时间复杂度

滑动窗口算法通常可以将O(n²)或O(n³)的暴力解法优化到O(n)的时间复杂度,因为每个元素最多被访问两次(一次由右指针,一次由左指针)。

滑动窗口算法的关键点

  1. 窗口表示:通常用两个指针(左指针和右指针)表示窗口的边界
  2. 窗口扩张:右指针移动,扩大窗口,寻找可行解
  3. 窗口收缩:左指针移动,缩小窗口,优化可行解
  4. 结果更新:在窗口滑动过程中不断更新最优解

常见问题及解决方案

  1. 如何确定窗口何时扩展或收缩

    • 通常当窗口不满足条件时扩展,满足条件时尝试收缩
  2. 如何处理重复元素

    • 可以使用哈希表或数组来记录窗口内元素的频率
  3. 如何初始化窗口

    • 根据问题需求,可以初始化为空窗口或包含前k个元素的窗口

练习题

  1. 找到字符串中所有字母异位词(LeetCode 438)
  2. 最大连续1的个数 III(LeetCode 1004)
  3. 替换后的最长重复字符(LeetCode 424)
  4. 水果成篮(LeetCode 904)
  5. 长度最小的子数组(LeetCode 209)

总结

滑动窗口算法是解决数组/字符串子区间问题的高效技巧,通过维护动态窗口避免了不必要的重复计算。掌握滑动窗口算法需要理解其核心思想,并通过大量练习熟悉各种变种问题。在实际应用中,需要根据具体问题灵活调整窗口的扩展和收缩条件。

http://www.lryc.cn/news/577858.html

相关文章:

  • 一个高端网站设计/宜兴网站建设
  • 哪里有好的免费成品网站程序/百度站长平台网站提交
  • 陕西建设厅网站/网络推广有哪些方法
  • 企业如何网站建设/关键词优化排名首页
  • 网站建成之后应该怎么做/写文的免费软件
  • seo快速排名站外流量推广/短视频营销的优势
  • wordpress修改搜索框全屏/白城seo
  • 利用博客做网站排名/推广网站有哪些
  • 个人计算机做服务器建网站/北京百度推广官网首页
  • 西安网站微信开发/大一网页设计作业成品
  • 做电影免费ppt模板下载网站/百度快照怎么使用
  • retweet主题 wordpress/上海专业seo
  • 网站制作成品免费/生哥seo博客
  • 石家庄h5网站建设/网站排名提高
  • 网站排名优化公司哪家好/网站提交入口链接
  • 网站建设部门/最新国内新闻10条
  • it软件网站建设/互联网公司排名
  • wordpress网站阿里云备案/百度推广怎么优化关键词的质量
  • 电商法规定企业网站必须做3年/最好的小说网站排名
  • 高端手机/河南网站seo靠谱
  • 建设部网站下载/本地建站软件有哪些
  • 视频当背景图片 网站开发/seo关键词排优化软件
  • 网站被降权后怎么办/推广平台软件有哪些
  • 仿做国外产品网站出路/推广哪个平台好
  • 帝国网站建设/公司网站页面设计
  • 卖服务器网站源码/百度搜索seo优化技巧
  • 机关门花网站建设/网店推广方法
  • 网站建设完成报告/市场seo是什么
  • 淄博哪个网站做房屋出赁好/中国公关公司前十名
  • 网站定制开发流程/网站优化关键词排名