算法笔记:从回溯到 DP 的优化之路
算法笔记:从回溯到 DP 的优化之路 日期: 2026-03-10主题: 记忆化搜索与动态规划难度: Medium → Hard标签: DP、记忆化搜索、状态转移、容斥原理 一、核心思想 记忆化的本质:把重复的子问题答案存起来,下次直接用。 关键问题:什么构成了一个唯一的状态? 优化路径┌─────────────────────────────────────────────────┐│ 回溯 (暴力枚举) │ 复杂度:O(2^n) 或 O(8^n) ❌ │ 问题:大量重复计算 └─────────────────────────────────────────────────┘ ↓┌─────────────────────────────────────────────────┐│ 记忆化搜索 (自顶向下) ...
LeetCode2864.使二进制字符串交替的最小翻转次数【中等】
LeetCode 2864. 使二进制字符串交替的最小翻转次数 题目链接: https://leetcode.cn/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/日期: 2026-03-07难度: Medium标签: 滑动窗口、字符串、贪心 题目描述给定一个二进制字符串 s,你可以执行两种操作: 将首元素移到末尾(循环移位) 任选一个元素反转(0→1 或 1→0) 求将 s 转换成交替字符串(如 “010101…” 或 “101010…”)所需的最少操作 2 的次数。 解题思路关键洞察 操作 1 的本质:不需要真正去截取首元素放到末尾,而是通过 拼接 s + s 来模拟循环移位。这样问题转化为:在长度为 2n 的字符串中,找一个长度为 n 的窗口,使其最接近目标交替串。 滑动窗口优化:如果暴力遍历每个窗口的所有元素,时间复杂度为 O(n²),不可接受。关键观察是:窗口每次只滑动一格,只有左右边界元素发生变化,中间元素不变。因此可以用一个全局变量 diff...
《分苹果问题:从暴力模拟到二分优化的一步步思考》
一、题目背景 有 n 个孩子和 m 个苹果,每个孩子至少分一个,且相邻两个孩子的苹果数差值不能超过 1,求在满足条件的前提下,小明(第 k 个孩子)最多可以分到多少苹果? 二、思路分析 相邻两个孩子的苹果数量不能大于一而且小明需要尽可能的多分,所以最后肯定是一个以小明为峰顶的一个“山峰”形状。 所以问题的关键就是我们假设小明分到了 x 个苹果,然后根据小明的位置分别计算出左右两边需要的苹果数量,并判断数量是否足够,如果足够的话就将加 x 加一然后继续判断,直到 m 个苹果不够分为止。 三、关键实现逻辑 关键在于苹果数量的计算,现在我们假设分给了小明 x 个苹果,然后小明的位置在 k,他左边有 k-1 个人,右边有 n-k 个人,现在以从左边开始举例子(应为右边的计算方式也是一样)。 这里要分两种情况讨论一下: 1、x - 1 >= k - 1 这种情况下我们可以简单的计算苹果的数量,就是一个等差数列,将首项加上未项乘以项数除以 2 即可得到结果。 2、x - 1 < k -...
LeetCode416.分割等和子集【中等】
相关标签: 数组、动态规划 题目简介: 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例: 示例 1: 输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2: 输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。 提示: 1 <= nums.length <= 200 1 <= nums[i] <= 100 解题思路: 题目要求我们分割等和子集,那首先想到的就是排除和为奇数的情况,当和为偶数时才有讨论的必要。我们现在的目标就变成了判断能否从数组中找出一些元素凑成总和的一半。 诶,这个描述是不是有一点耳熟,我换一个说法你就明白了,给你一个背包,让你判断能否将背包装满。所以这道题本质上就是背包问题,而且是 01 背包问题(不允许重复)。 唯一需要注意的一点就是这里的 dp 数组需要定义成 boolean...
LeetCode368.最大整除子集【中等】
相关标签: 数组、动态规划 题目简介: 给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足: answer[i] % answer[j] == 0 ,或 answer[j] % answer[i] == 0 如果存在多个有效解子集,返回其中任何一个均可。 示例: 示例 1: 输入:nums = [1,2,3]输出:[1,2]解释:[1,3] 也会被视为正确答案。 示例 2: 输入:nums = [1,2,4,8]输出:[1,2,4,8] 提示: 1 <= nums.length <= 1000 1 <= nums[i] <= 2 * 109 nums 中的所有整数 互不相同 解题思路: 这道题其实一开始我还是想的是先求出所有子集,然后对于每个子集去判断是否能够满足相互整除的要求。但是看了一下 nums 数组的长度好吧这个做法肯定会超内存限制。 然后我想到提前剪枝先去判断 nums...
LeetCode1863-找出所有子集的异或和再求和【简单】
相关标签: 位运算、数组、回溯 题目简介: 一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。 例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 = 1 。 给你一个数组 nums ,请你求出 nums 中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。 注意:在本题中,元素 相同 的不同子集应 多次 计数。 数组 a 是数组 b 的一个 子集 的前提条件是:从 b 删除几个(也可能不删除)元素能够得到 a 。 示例: 示例 1: 输入:nums = [1,3]输出:6解释:[1,3] 共有 4 个子集:- 空子集的异或总和是 0 。- [1] 的异或总和为 1 。- [3] 的异或总和为 3 。- [1,3] 的异或总和为 1 XOR 3 = 2 。0 + 1 + 3 + 2 = 6 示例 2: 输入:nums = [5,1,6]输出:28解释:[5,1,6] 共有 8 个子集:- 空子集的异或总和是 0 。- [5] 的异或总和为 5 。- [1] 的异或总和为 1 。- [6]...
基于Hexo框架和Butterfly主题搭建个人博客网站
一、前言 个人博客无疑是很多开发者、技术爱好者记录技术经验、分享生活和展示个人作品的一个重要平台。作为一名开发者,搭建一个属于自己的博客网站不仅是一个展示自我的窗口,还能帮助自己总结学习成果,提升技术水平。 在这篇博客中,我将带你一起走过基于 Hexo 框架搭建个人博客的全过程,同时介绍如何使用 Butterfly 主题来美化博客,使其更加符合个人风格。 下面展示一下我的个人博客网站: 二、Hexo 框架简介2.1、什么是 Hexo? Hexo 是一个快速、简洁且高效的博客框架。 Hexo 使用 [Markdown][](或其他标记语言)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 [Hexo][] 2.2、安装 在安装 Hexo 之前需要先安装好 Git 和 Node.js: Git 和 Node.js 的安装过程这里就不过多赘述了,下面进行 hexo 的安装: hexo 的安装也非常简单,在终端运行以下代码: $ npm install -g hexo-cli 安装 Hexo 完成后,请执行下列命令,Hexo...
Spring Boot + Vue 前后端分离项目上线实记
一、前言 本文记录了一个前后端分离项目的完整部署流程。许多同学在本地开发完项目后,缺乏将其部署到远程服务器的实战经验。因此,我将以一个实际项目为例,详细展示从环境准备到最终上线的全过程,希望对你有所帮助! 二、服务器环境准备2.1、配置服务器 首先准备一个服务器,我这里用的是阿里云 : 第一次购买一般都会有优惠,而且对于一般的单体项目而言 2 核 2G 的配置也够用了,当然也有 3 个月的试用版本。 完成之后进入控制台第一件事就是去你左侧边栏的安全组里面开放端口,这样才能从远程访问。 端口范围根据需求开放,一般是 3306 mysql、80 nginx 代理、13103 这里是宝塔面板的端口,什么是宝塔面板后面会讲到,下面 3 个端口是默认初始化好的。 然后进入实例面板重新设置一下你的服务器密码: 修改完成之后就可以试着连接你的服务器了,我这里使用的是...
SpringCloud 微服务入门:服务调用流程解析
目录 1、引言 2、微服务基础概念 2.1、框架总览 2.2、微服务与单体架构的对比 3、微服务的最大特点:服务之间的调用 3.1、服务注册 3.1.1、注册中心原理 3.1.2、Nacos 注册中心 3.1.3、服务注册 3.2、服务间通信方式 3.2.1、OpenFeign 3.2.2、RabbitMQ 3.2.3、SpringAMQP 3.3、负载均衡 3.3.1、源码跟踪 3.3.2、NacosRule 3.4、 服务容错机制 3.4.1、服务保护方案 3.4.2、Sentinel 3.4.3、请求限流 3.4.4、线程隔离 3.4.5、服务熔断 3.5、分布式事务 3.5.1、Seata 3.5.2、XA 模式 3.5.3、AT...
Linux(Centos7)安装docker、mysql踩坑总结
本文主要是记录了在 CentOS 7 上安装 Docker 和 MySQL 时遇到的一些问题,主要是由于镜像源未配置正确,导致无法顺利下载所需的依赖包。下面将介绍在安装过程中遇到的困难,并分享如何通过配置合适的镜像源来解决这些问题,从而顺利完成 Docker 和 MySQL 的安装,希望能够帮到有需要的人。 一、安装准备 系统版本:CentOS 7 先安装 yum: yum install -y yum-utils device-mapper-persistent-data lvm2 执行之前先配置一下镜像源,输入以下命令进入配置文件: vim /etc/yum.repos.d/CentOS-Base.repo 再将 mirrorlist 注释掉然后将 baseurl 改为阿里云镜像,然后保存退出 一定要将 mirrorlist 注释掉!不然还是会直接访问官方源导致下载失败! 输入下面的命令检验是否安装成功: 当然不排除网络问题,可以先用 ping 命令测试一下网络是否连通: 只要网络连通,并且配置文件修改无误就肯定能安装成功。 二、安装...
