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

滑动窗口,最长子序列最好的选择 -> O(N)

最近在学校上短学期课程,做程序设计题,一下子回忆起了大一学数据结构与算法的日子!

这十天我会记录一些做题的心得,今天带来的是对于最长子序列长度题型的解题框架:滑动窗口

本质就是双指针算法:

通过left和right指针构建一个左闭右开的窗口window:(left, right]

首先,通过right指针向右expand窗口

窗口满足题设条件的话就一直expand,直到条件被打破。

此时窗口不满足题设条件,需要通过left指针向右shrink窗口,直到再次满足题设条件。

题目变化,变的就是如何maintain这个窗口而已。

k

int fun(int* A, int N,int S) {
//	sliding window// The window we maintain is like [left, right)int left = 0, right = 0;int windowSum = 0;int Max = 0;while(right < N) {// right expandingwindowSum += A[right++];Max = windowSum <= S && right - left > Max ? right - left : Max;// shrinkingwhile(left <= right && windowSum > S) {windowSum -= A[left++];}}return Max;
}

int fun(int* A, int N,int S) {
//	sliding window// The window we maintain is like [left, right)int left = 0, right = 0;int Max = 0;// maintain the local minimum and local maximumint winMin = A[0];int winMax = A[0];while(right < N) {// right expandingif(A[right] > winMax) {winMax = A[right];}else if(A[right] < winMin) {winMin = A[right];}right++;Max = winMax - winMin <= S && right - left > Max ? right - left : Max;// shrinkingwhile(left <= right && winMax - winMin > S) {
//			Don't forget to initialize the local value before setting.left++;winMin = A[left];winMax = A[right];
//			set the maximum and minimum in the new windowfor(int i = left; i < right; i++) {if(A[i] > winMax) {winMax = A[i];}else if(A[i] < winMin) {winMin = A[i];}}}}return Max;
}

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

相关文章:

  • 【Python】已解决:Python安装过程中的报错问题
  • C++ STL IO流介绍
  • 华为浏览器,Chrome的平替,插件无缝连接
  • SpringBoot新手快速入门系列教程:前述
  • C语言9 指针
  • Floyd判圈算法——寻找重复数(C++)
  • 面试题目分享
  • Solana开发之Anchor框架
  • 界面组件Kendo UI for React 2024 Q2亮点 - 生成式AI集成、设计系统增强
  • python输出/sys/class/power_supply/BAT0/电池各项内容
  • HDFS体系架构文件写入/下载流程
  • 大模型之战进入新赛季,开始卷应用
  • MySQL8.4.0 LTS安装教程 【小白轻松上手2024年最新长期支持版本MySQL手把手保姆级Windows超详细图文安装教程】
  • Linux 例题及详解
  • 爆款文案管理系统设计
  • FPGA-Verilog-Vivado-软件使用
  • Ambari Hive 创建函数无权限
  • ARM GEC6818 LCD绘图 实心圆 三角形 五角星 任意区域矩形以及旗帜
  • Sentinel-1 Level 1数据处理的详细算法定义(三)
  • 一款永久免费的内网穿透工具——巴比达
  • 翻译|解开LLMs的神秘面纱:他们怎么能做没有受过训练的事情?
  • 代码随想录-DAY⑦-字符串——leetcode 344 | 541 | 151
  • JavaScript(7)——数组
  • Spark RDD优化
  • idea:解决Maven报错 Properties in parent definition are prohibited
  • 代理IP池:解析与应用
  • MQTT是什么,物联网
  • 分布式训练
  • day10:04一文搞懂decode和decoding的区别
  • MechMind结构光相机 采图SDK python调用