最优/极值问题的算法选择

news/2025/9/29 19:34:24/文章来源:https://www.cnblogs.com/dedseclossr/p/19119379

如何选择滑动窗口、二分、动态规划算法

刷leetcode时对于一些最优/极值问题往往不知采用哪一种算法,故借助大模型学习一些算法要点。


1. 滑动窗口(Sliding Window)

特点

  • 适用于 数组 / 字符串连续子区间 问题。
  • 目标通常是:区间内的最大/最小和、最长/最短长度、是否满足条件。
  • 要求窗口左右移动时能 快速更新答案(O(1) 或 O(log n) 更新)。

常见题型

  • 固定长度子数组的最大/最小和。
  • 至多 / 至少 K 个不同元素的子串问题。
  • 满足某个和 / 约束的最短或最长子数组。

关键词

连续子数组 / 子串 + 统计 / 优化


特点

  • 答案具有 单调性
    如果某个值 x 可行,那么 >x 或 <x 的区间整体也一定可行。
  • 通过 判定函数 check(mid) 来决定搜索方向。
  • 时间复杂度通常是 O(log n * f(n))

常见题型

  • 最小化最大值 / 最大化最小值
  • 分割问题(切木头、运货、分糖果)。
  • 阈值判定类问题(满足条件的最小时间 / 最大容量)。

关键词

最小化最大 / 最大化最小 + 判定函数单调


3. 动态规划(Dynamic Programming, DP)

特点

  • 状态之间有 重叠子问题最优子结构
  • 问题不能仅靠窗口滑动或单调性解决,需要逐步递推。
  • 常见于 序列问题 / 组合问题 / 路径问题

常见题型

  • 背包问题(01 背包、多重背包、完全背包)。
  • 最长子序列 / 编辑距离。
  • 区间 DP、树形 DP。
  • 棋盘/图上的最短路径或最大得分路径。

关键词

子问题重叠 + 递推关系明确


4. 贪心、搜索等算法待补充...


5. 快速判断流程

flowchart TDA[遇到最优问题] --> B{是否涉及连续子数组/子串?}B -->|是| C[考虑 滑动窗口 / 双指针 / 前缀和]B -->|否| D{答案是否具有单调性?}D -->|是| E[考虑 二分 + check 函数]D -->|否| F{问题是否有重叠子问题和最优子结构?}F -->|是| G[考虑 动态规划]F -->|否| H[尝试其他算法: 贪心 / 图论 / 搜索等]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

珠海的门户网站有哪些深圳地址大全

ScottPlot是一款简单易用、高度定制、性能卓越的.NET绘图库&#xff0c;支持跨平台操作。除提供标准图表类型外&#xff0c;还支持交互式操作&#xff0c;呈现生动的数据展示。在工厂数字化系统中&#xff0c;可用于生产数据可视化、设备监测和质量控制。无论用于科学研究、数据…

网站开发和推广方案永康市建设银行网站查询

PHP程序的调试一直是一件让人头疼的事&#xff0c;它既不像VB等高级语言那样有集成的编译调试环境&#xff0c;也不想Perl那样可以在Linux或者DOS环境下直接运行。其实&#xff0c;我们完全可以通过灵活地使用echo语句来完成对PHP的调试工作。下面的几个函数可以让你随时查看程…

梁山网站建设多少钱wordpress文章末尾添加内容

前言 有时遇到这样的需求&#xff0c;就是在表格里面嵌入一个表格&#xff0c;以及要求带有分页&#xff0c;这样在ElementPlus中很好实现。以下使用Vue2语法实现一个简单例子&#xff0c;毕竟Vue3兼容Vue2语法&#xff0c;若想要Vue3版本例子&#xff0c;简单改改就OK了。 一…

外贸建站wordpress昆山网站建设jofuns

以下内容整理于Linux字符设备驱动剖析&#xff0c;如有侵权请告知删除 。 一、应用层的程序 应用程序一般都是open打开设备文件&#xff0c;read、write、ioctl设备文件&#xff0c;最后close设备文件退出。 int main(int argc ,char *argv[]) { unsigned char val[1] 1; …

第三方控件库的添加和使用

添加把第三方控件库先复制到根目录下 ,也就是Debug 的目录下然后再拖到工具箱的空白处下就可以了使用 和之前的控件使用相同 ‍

实用指南:基于 HTML、CSS 和 JavaScript 的智能图像灰度直方图匹配系统

实用指南:基于 HTML、CSS 和 JavaScript 的智能图像灰度直方图匹配系统2025-09-29 19:20 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: au…

C4NR PVP服务器1.2 天穹炮塔更新

C4NR PVP服务器1.2 天穹炮塔更新 更新内容在风弹获得处增加了一个建筑,可以使用风弹上去。上面是一个放置压力板的一个平台。踩压力板会获得20点风弹伤害并且生成一个风弹。玩家可以通过向指定方向攻击风弹来控制风弹…

树形dp [JOI Open 2020] 发电站 / Power Plant

作为最强摸鱼人的 BaiBaiShaFeng,这个题解也是发到洛谷上了,希望给过。 先辈们说的太简略了我感觉有点难懂,虽然我的表达能力很弱,估计强不了多少。 注:参考过网上零散题解。 题意很好理解,我们就不过多叙述了。…

深入解析:灵画-AI绘画小程序

深入解析:灵画-AI绘画小程序pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

AT_arc156_b [ARC156B] Mex on Blackboard

首先枚举你花 \(i\) 次操作可以搞到的最大值是什么,然后你剩下的集合就随便取,只要取不超过 \(k - i\) 个即可,用插板法很容易做。

实用指南:CAN邮箱深度解析:从硬件架构到实战应用

实用指南:CAN邮箱深度解析:从硬件架构到实战应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

产品排序

考虑区间 $dp$。设 $f_{i,j}$ 表示处理 $[i,j]$ 最小的总惩罚值。分类: - 产品 $i$ 第一个出栈,则有 $f_{i,j}=t_i\times sd_{i,j}+f_{i+1,j}$ - 产品 $i$ 第 $k$ 个出栈,则有 $f_{i,j}=f_{i+1,k}+f_{k + 1,j}+st_{…

众包网站开发网站建设录哪个科目

先拆成链的情况来看。 设B[i]表示i要向i1拿糖果的数量&#xff0c;C为平均数&#xff0c;则B[i] C - A[i] B[i-1] Answer就是B的绝对值之和 现在来看环的情况&#xff0c;也就是说B[n]指的是n要向1拿糖果的数量。不妨设B[n]为K&#xff0c;则B[1] C - A[1] K………… 照着式…

云阳一平米网站建设打开百度网页

LVGL_基础控件label 1、创建一个基础对象 /* 创建一个基础对象 label */ lv_obj_t * label lv_label_create(lv_scr_act()); // 创建一个label部件(对象),他的父对象是活动屏幕对象2、设置显示内容 char * text "www.100ask.net"; // 要显示的文字 /* 展示文…

环形链表II-leetcode

题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系…

ubuntu20.04安装nvidia显卡

24.04内核最新升级6.14.0,但是会出现英伟达驱动问题,现有的版本是6.8 重新安装了ubuntu20.04 先检查可用驱动:ubuntu-drivers devices下面会显示推荐安装的驱动版本,因为我原先的版本太低了,导致ubuntu内核更新一…

搬瓦工的主机可以用来做网站吗如何自己做加盟网站

文章目录 一.进程间通信:进程间通信的本质: 二.Linux管道通信匿名管道:关于管道通信的要点:基于匿名管道构建进程池: 三.System-V共享内存共享内存和命名管道协同通信 参考Linux内核源码版本------linux-2.4.3 一.进程间通信: 操作系统中,为了保证安全性,进程之间具有严格的独…

[线段树系列 #6] 标记永久化

[线段树系列 #6] 标记永久化 标记永久化是线段树的一个技巧,通常用于对主席树等难以 pushdown 的数据结构进行区间修改 具体思想已经体现在名字里了,我们结合例题稍微讲解一下 例题1 P3372 【模板】线段树 1 线段树区…

c语言switch和if语句

c语言switch和if语句c语言中switch和if语句 #include <stdio.h>int main(){int category = 2;float price = 299.9;switch (category){case 1 :if (price < 500){printf("电子产品价格较低,无优惠\n&qu…

Qt(制作一个方便的文本编辑器)

Qt(制作一个方便的文本编辑器)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…