自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

闻缺陷则喜何志丹

本人拙作《闻缺陷则喜》欢迎指教,可在CSDN下载

  • 博客(1353)
  • 资源 (86)
  • 收藏
  • 关注

原创 C++队列、双向队列

队列(Queue)是一种基本的线性数据结构,它遵循先进先出(First In First Out, FIFO)的原则。这意味着最先被添加到队列中的元素将会是最先被移除的。和生活中,无人插队的队列一样。队列内部实现可能是连续空间,也可能是多段空间。

2024-09-30 07:00:00 1165 92

原创 VS2019打开《喜缺全书算法册》附带代码的方法兼述单元测试

使用方法一:修改某个封装类,然后运行所有测试用例。看是否有测试用例,没通过。调试没有通过的测试用例。在改测试用例上,单击鼠标右键,在右键菜单中选择“调试”。使用方法二:修改某题的源码,然后运行此类的测试用例。使用方法三:输出日志。Microsoft::VisualStudio::CppUnitTestFramework::Logger::WriteMessage("d"); 选中此测试用例才会显示结果。

2024-07-28 07:00:00 3179 56

原创 C++算法与数据结构

本文的算法汇总,包括但不限于动态规划、回溯、贪心、分支、图论、组合数学、数量等。

2024-05-23 08:28:25 2000 233

原创 【C++ 前缀和 数论】1590. 使数组和能被 P 整除|2038

给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空),使得剩余元素的 和 能被 p 整除。 不允许 将整个数组都移除。请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回 -1 。子数组 定义为原数组中连续的一组元素。

2024-10-01 17:00:00 534

原创 【C++前缀和 数论 贪心】2245. 转角路径的乘积中最多能有几个尾随零|2036

给你一个二维整数数组 grid ,大小为 m x n,其中每个单元格都含一个正整数。转角路径 定义为:包含至多一个弯的一组相邻单元。具体而言,路径应该完全 向水平方向 或者 向竖直方向 移动过弯(如果存在弯),而不能访问之前访问过的单元格。在过弯之后,路径应当完全朝 另一个 方向行进:如果之前是向水平方向,那么就应该变为向竖直方向;反之亦然。当然,同样不能访问之前已经访问过的单元格。一条路径的 乘积 定义为:路径上所有值的乘积。请你从 grid 中找出一条乘积中尾随零数目最多的转角路径,并返回该路径中

2024-10-01 07:00:00 516 1

原创 【C++单调队列】1438. 绝对差不超过限制的最长连续子数组|1672

给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。

2024-09-30 07:00:00 618 1

原创 【C++前缀和 动态规划 博弈】1140. 石子游戏 II|2034

Alice 和 Bob 继续他们的石子游戏。许多堆石子 排成一行,每堆都有正整数颗石子 piles[i]。游戏以谁手中的石子最多来决出胜负。Alice 和 Bob 轮流进行,Alice 先开始。最初,M = 1。在每个玩家的回合中,该玩家可以拿走剩下的 前 X 堆的所有石子,其中 1

2024-09-29 17:00:00 834

原创 【C++前缀和】1737. 满足三条件之一需改变的最少字符数|1952

给你两个字符串 a 和 b ,二者均由小写字母组成。一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 。操作的最终目标是满足下列三个条件 之一 :a 中的 每个字母 在字母表中 严格小于 b 中的 每个字母 。b 中的 每个字母 在字母表中 严格小于 a 中的 每个字母 。a 和 b 都 由 同一个 字母组成。返回达成目标所需的 最少 操作数。

2024-09-29 07:00:00 894 1

原创 【C++前缀和 动态规划 贪心】813. 最大平均值和的分组|1936

给定数组 nums 和一个整数 k 。我们将给定的数组 nums 分成 最多 k 个非空子数组,且数组内部是连续的 。 分数 由每个子数组内的平均值的总和构成。注意我们必须使用 nums 数组中的每一个数进行分组,并且分数不一定需要是整数。返回我们所能得到的最大 分数 是多少。答案误差在 10-6 内被视为是正确的。

2024-09-28 17:00:00 817 2

转载 【超音速 专利CN115880365A 】一种双工位自动螺丝拧装检测方法、系统及装置

在智能工厂逐渐普及的今天,工厂对电动工具的动作状态和质量的实时追踪仍然是短板,电动工具在智能化工厂工作时主要存在各种问题,一是电动工具会在使用过程中会产生不可避免的损耗,由损耗带来的准确性下降易导致螺丝卡死、打滑;二是在智能工厂正常作业的过程中,机械臂和传送带的工作周期不能保证永远契合,随着作业时间的增长,机械臂与传送带的工作逐渐失衡,使作业存在隐患;三是在工厂中检测产品质量的方式还是依赖传统的人工质检,这种质检手段无法在总装车间实现全流程全过程覆盖,这样就无法及时发现产品问题并阻止损失。如今多数的智能工

2024-09-28 15:30:00 23

原创 【C++前缀和】2731. 移动机器人|1922

有一些机器人分布在一条无限长的数轴上,他们初始坐标用一个下标从 0 开始的整数数组 nums 表示。当你给机器人下达命令时,它们以每秒钟一单位的速度开始移动。给你一个字符串 s ,每个字符按顺序分别表示每个机器人移动的方向。'L' 表示机器人往左或者数轴的负方向移动,'R' 表示机器人往右或者数轴的正方向移动。当两个机器人相撞时,它们开始沿着原本相反的方向移动。请你返回指令重复执行 d 秒后,所有机器人之间两两距离之和。由于答案可能很大,请你将答案对 109 + 7 取余后返回。注意:对于坐标在

2024-09-28 07:00:00 691

原创 【C++前缀和】2875. 无限数组的最短子数组|1913

给你一个下标从 0 开始的数组 nums 和一个整数 target 。下标从 0 开始的数组 infinite_nums 是通过无限地将 nums 的元素追加到自己之后生成的。请你从 infinite_nums 中找出满足 元素和 等于 target 的 最短 子数组,并返回该子数组的长度。如果不存在满足条件的子数组,返回 -1

2024-09-27 15:30:00 545 4

原创 【C++前缀和 位运算 贪心 】2680. 最大或值|1912

给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k 。每一次操作中,你可以选择一个数并将它乘 2 。你最多可以进行 k 次操作,请你返回 nums[0] | nums[1] | ... | nums[n - 1] 的最大值。a | b 表示两个整数 a 和 b 的 按位或 运算。

2024-09-27 07:00:00 629

原创 【C++前缀和】1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?|1858

给你一个下标从 0 开始的正整数数组 candiesCount ,其中 candiesCount[i] 表示你拥有的第 i 类糖果的数目。同时给你一个二维数组 queries ,其中 queries[i] = [favoriteTypei, favoriteDayi, dailyCapi] 。你按照如下规则进行一场游戏:你从第 0 天开始吃糖果。你在吃完 所有 第 i - 1 类糖果之前,不能 吃任何一颗第 i 类糖果。在吃完所有糖果之前,你必须每天 至少 吃 一颗 糖果。请你构建一个布尔型数组

2024-09-26 17:00:00 666 4

原创 【C++差分数组 二分查找】P1083借教室

有n天,第i天有r[i]间空教室。有m份申请req[i] = {di,starti,endi} 表示从starti天到endi天,都需要di间教室。包括第starti和endi天。都教室没有任何要求。如果能满足所有人要求,返回0。按申请顺序处理所有人的要求,返回第一个无法满足的请求编号。

2024-09-26 07:00:00 635

原创 【C++前缀和】1546. 和为目标值且不重叠的非空子数组的最大数目|1855

给你一个数组 nums 和一个整数 target 。请你返回 非空不重叠 子数组的最大数目,且每个子数组中数字和都为 target 。

2024-09-25 17:00:00 1392 3

原创 【C++前缀和 状态压缩】1177. 构建回文串检测|1848

给你一个字符串 s,请你对 s 的子串进行检测。每次检测,待检子串都可以表示为 queries[i] = [left, right, k]。我们可以 重新排列 子串 s[left], ..., s[right],并从中选择 最多 k 项替换成任何小写英文字母。 如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结果为 true,否则结果为 false。返回答案数组 answer[],其中 answer[i] 是第 i 个待检子串 queries[i] 的检测结果。注意:在替换时,子串中的每

2024-09-25 07:00:00 639

原创 【C++ 基础数学 】2121. 2615相同元素的间隔之和|1760

令2165,和此题几乎相等。给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地,arr[i] 和 arr[j] 之间的间隔是 |i - j| 。返回一个长度为 n 的数组 intervals ,其中 intervals[i] 是 arr[i] 和 arr 中每个相同元素(与 arr[i] 的值相同)的 间隔之和 。注意:|x| 是 x 的绝对值。

2024-09-24 17:00:00 918 2

原创 C++堆(优先队列)priority_queue

堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆(大根堆);每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆(小根堆)。从堆的概念可知,堆是一棵完全二叉树,因此可以使用层序的规则采用顺序的方式来高效存储。完全二叉树,我的理解:任何节点的子节点只有以下三种情况:一,没有孩子。二,有两个孩子。三,只有左孩子。不会出现只有右孩子,没有左孩子的情况。根节点的编号1,根节点的左孩子编号2,根节点的右孩子编号3。2的孩子编号为:4,5。3的孩子编号:6,7。

2024-09-24 07:00:00 554

原创 C++离线查询

离线算法( offline algorithms),离线计算就是在计算开始前已知所有输入数据,输入数据不会产生变化,且在解决一个问题后就要立即得出结果的前提下进行的计算。通俗的说:离线查询:问完所有问题后,依次回答。可以按某个查询值排序,这样方便处理。**注意**:要记录排序前,排序后的对应关系。比如:对查询的下标排序,不对查询排序。在线查询:每问一个问题,就回答。

2024-09-23 07:00:00 3469 120

原创 【C++稳定排序 离线查询】2343. 裁剪数字后查询第 K 小的数字|1651

stable_sort(稳定排序函数)与sort的区别:sort更类似于快速排序的思想,而stable_sort用得是归并排序的思路当数据都相同时,他不会打乱原有的顺序,所以更加稳定例如:有两个相同的数A和B,在sort排序后B有可能会跑到A的前面,但是stable_sort则不会打乱原有顺序

2024-09-23 07:00:00 1732 4

转载 【超音速 专利 CN116147483A】一种适用于极片纠偏对齐度的检测方法、系统及平台

本发明公开了一种适用于极片纠偏对齐度的检测方法、系统及平台。本发明方案通过方法获取极片图像数据,并实时处理所述极片图像数据;根据处理后的极片图像数据,生成并获取与所述极片图像数据相对应的极片长度数据;结合所述极片长度数据,判定极片长度是否符合预设的阈值,若符合,则记录所述极片的长度数据,并实时纠偏对齐度自适应处理所述极片;否则,踢除所述极片,以及与所述方法相应的系统、平台以及存储介质;可以控制极片长度,将异常片排废。并且通过纠偏自适应算法达到保护电芯整体对齐度的效果,提高电芯的良品率,减少整个电芯排废,减少

2024-09-22 18:36:54 136 3

原创 【C++前缀和 排序】2171. 拿出最少数目的魔法豆|1748

给定一个 正整数 数组 beans ,其中每个整数表示一个袋子里装的魔法豆的数目。请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少还有一颗 魔法豆的袋子)魔法豆的数目 相等。一旦把魔法豆从袋子中取出,你不能再将它放到任何袋子中。请返回你需要拿出魔法豆的 最少数目。

2024-09-22 17:00:00 696

原创 【C++前缀和 状态压缩】2588. 统计美丽子数组数目|1696

给你一个下标从 0 开始的整数数组nums 。每次操作中,你可以:选择两个满足 0

2024-09-22 07:00:00 1194 1

原创 【C++前缀和】974. 和可被 K 整除的子数组|1675

给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的非空 子数组 的数目。子数组 是数组中 连续 的部分。

2024-09-21 17:00:00 828 1

原创 HObject复制耗时试用

如果不用非安全代码,HObject(img.Key)可以替换img.Clone(),前者用时更少。

2024-09-21 07:00:00 673 1

原创 【C++前缀异或】1738. 找出第 K 大的异或坐标值|1671

给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n 由非负整数组成。矩阵中坐标 (a, b) 的 目标值 可以通过对所有元素 matrix[i][j] 执行异或运算得到,其中 i 和 j 满足 0

2024-09-20 15:30:00 721 1

原创 【C++前缀和】2222. 选择建筑的方案数|1656

给你一个下标从 0 开始的二进制字符串 s ,它表示一条街沿途的建筑类型,其中:s[i] = '0' 表示第 i 栋建筑是一栋办公楼,s[i] = '1' 表示第 i 栋建筑是一间餐厅。作为市政厅的官员,你需要随机 选择 3 栋建筑。然而,为了确保多样性,选出来的 3 栋建筑 相邻 的两栋不能是同一类型。比方说,给你 s = "001101" ,我们不能选择第 1 ,3 和 5 栋建筑,因为得到的子序列是 "011" ,有相邻两栋建筑是同一类型,所以 不合 题意。请你返回可以选择 3 栋建筑的 有

2024-09-20 07:00:00 1556 2

原创 【C++前后缀分解】2484. 统计回文子序列数目|2223

给你数字字符串 s ,请你返回 s 中长度为 5 的 回文子序列 数目。由于答案可能很大,请你将答案对 109 + 7 取余 后返回。提示:如果一个字符串从前往后和从后往前读相同,那么它是 回文字符串 。子序列是一个字符串中删除若干个字符后,不改变字符顺序,剩余字符构成的字符串。

2024-09-19 17:00:00 1616

原创 【C++ 差分数组 前后缀分解】P7404家庭菜园

出自洛谷,我简述一下。已知数组a,长度为n(1

2024-09-19 07:00:00 2457 105

原创 【C++前后缀分解 降维】2906. 构造乘积矩阵|2074

给你一个下标从 0 开始、大小为 n * m 的二维整数矩阵 grid ,定义一个下标从 0 开始、大小为 n * m 的的二维矩阵 p。如果满足以下条件,则称 p 为 grid 的 乘积矩阵 :对于每个元素 p[i][j] ,它的值等于除了 grid[i][j] 外所有元素的乘积。乘积对 12345 取余数。返回 grid 的乘积矩阵。

2024-09-18 17:00:00 767

原创 【C++前后缀分解】1888. 使二进制字符串字符交替的最少反转次数|2005

给你一个二进制字符串 s 。你可以按任意顺序执行以下两种操作任意次:类型 1 :删除 字符串 s 的第一个字符并将它 添加 到字符串结尾。类型 2 :选择 字符串 s 中任意一个字符并将该字符 反转 ,也就是如果值为 '0' ,则反转得到 '1' ,反之亦然。请你返回使 s 变成 交替 字符串的前提下, 类型 2 的 最少 操作次数 。我们称一个字符串是 交替 的,需要满足任意相邻字符都不同。比方说,字符串 "010" 和 "1010" 都是交替的,但是字符串 "0100" 不是。

2024-09-18 07:00:00 1430

原创 【C++前后缀分解】1653. 使字符串平衡的最少删除次数|1793

给你一个字符串 s ,它仅包含字符 'a' 和 'b'​​​​ 。你可以删除 s 中任意数目的字符,使得 s 平衡 。当不存在下标对 (i,j) 满足 i < j ,且 s[i] = 'b' 的同时 s[j]= 'a' ,此时认为 s 是 平衡 的。请你返回使 s 平衡 的 最少 删除次数。

2024-09-17 17:00:00 701

原创 【C++前后缀分解 动态规划】2100. 适合野炊的日子|1702

你和朋友们准备去野炊。给你一个下标从 0 开始的整数数组 security ,其中 security[i] 是第 i 天的建议出行指数。日子从 0 开始编号。同时给你一个整数 time 。如果第 i 天满足以下所有条件,我们称它为一个适合野炊的日子:第 i 天前和后都分别至少有 time 天。第 i 天前连续 time 天建议出行指数都是非递增的。第 i 天后连续 time 天建议出行指数都是非递减的。更正式的,第 i 天是一个适合野炊的日子当且仅当:security[i - time] >= s

2024-09-17 07:00:00 933 3

原创 C++前后缀分解

分治法的一种,将数组和字符串,拆分成前缀和后缀。字符串(数组)的前缀是字符串的前i个元素:s.substr(0,i-1),即s[0] $\dots$ s[i-1]。同理后缀就是字符串s的后几个元素(字符)。不失一般型,我们以字符串s=“abcde"为例,s有5种拆分方法:

2024-09-16 07:00:00 1512 115

原创 【C++前后缀分解】1031. 两个非重叠子数组的最大和|1680

给你一个整数数组 nums 和两个整数 firstLen 和 secondLen,请你找出并返回两个非重叠 子数组 中元素的最大和,长度分别为 firstLen 和 secondLen 。长度为 firstLen 的子数组可以出现在长为 secondLen 的子数组之前或之后,但二者必须是不重叠的。子数组是数组的一个 连续 部分。

2024-09-16 07:00:00 681

原创 【前缀和】2145. 统计隐藏数组数目|1614

给你一个下标从 0 开始且长度为 n 的整数数组 differences ,它表示一个长度为 n + 1 的 隐藏 数组 相邻 元素之间的 差值 。更正式的表述为:我们将隐藏数组记作 hidden ,那么 differences[i] = hidden[i + 1] - hidden[i] 。同时给你两个整数 lower 和 upper ,它们表示隐藏数组中所有数字的值都在 闭 区间 [lower, upper] 之间。比方说,differences = [1, -3, 4] ,lower = 1 ,u

2024-09-15 17:00:00 548 1

原创 【C++前缀和】1524. 和为奇数的子数组数目|1610

给你一个整数数组 arr 。请你返回和为 奇数 的子数组数目。由于答案可能会很大,请你将结果对 10^9 + 7 取余后返回。

2024-09-15 07:00:00 762

原创 【C++二分查找】2560. 打家劫舍 IV

沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额 。给你一个整数数组 nums 表示每间房屋存放的现金金额。形式上,从左起第 i 间房屋中放有 nums[i] 美元。另给你一个整数 k ,表示窃贼将会窃取的 最少 房屋数。小偷总能窃取至少 k 间房屋。返回小偷的 最小 窃取能力。

2024-09-14 17:00:00 860

原创 【C++二分查找 容斥原理】1201. 丑数 III

丑数是可以被 a 或 b 或 c 整除的 正整数 。给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数。

2024-09-14 07:00:00 873

喜缺全书算法册对应源码单元测试用例

电子书、博文和附录分工。电子书以总结、原理、正确性证明为主;博文(题解)以思路、源码、封装类(模板)、测试用例、流程图为主。附录:封装好的类、小题题解、很长的源码和单元测试。 本书针对读者:刚刚入职的软件工程师,假定已经学完了“C++”和“算法与数据结构基础”。工程师和学生不同,工程师的首要目标的实用。工程师用到的知识是未知的,很多都是临时用一下,之后几年甚至一辈子都不会用到。受精力的限制,不可能将所有遇到的知识全部学完。本文会有超多用例,方便工程师从最相近的样例开始修改。所以,本文先讲如何使用,再讲原理,最后讲样例;设计(如:流程图)和源码会作为附录提供。

2024-07-05

位运算、状态压缩、枚举子集汇总.html

位运算、状态压缩、枚举子集汇总.html

2024-04-27

本博客配套流程图,会经常更新

Bob 站在单元格 (0, 0) ,想要前往目的地 destination :(row, column) 。他只能向 右 或向 下 走。你可以为 Bob 提供导航 指令 来帮助他到达目的地 destination 。 指令 用字符串表示,其中每个字符: 'H' ,意味着水平向右移动 'V' ,意味着竖直向下移动 能够为 Bob 导航到目的地 destination 的指令可以有多种,例如,如果目的地 destination 是 (2, 3),"HHHVV" 和 "HVHVH" 都是有效 指令 。 然而,Bob 很挑剔。因为他的幸运数字是 k,他想要遵循 按字典序排列后的第 k 条最小指令 的导航前往目的地 destination 。k 的编号 从 1 开始 。 给你一个整数数组 destination 和一个整数 k ,请你返回可以为 Bob 提供前往目的地 destination 导航的 按字典序排列后的第 k 条最小指令 。

2024-04-24

利用二分查找解决H指数问题

利用二分查找解决H指数问题。

2024-01-01

搜索矩阵C++实现:二分查找Z形查找

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。

2023-12-17

长度最短的子数组C++实现

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 示例 2: 输入:target = 4, nums = [1,4,4] 输出:1 示例 3: 输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0 提示: 1 <= target <= 109 1 <= nums.length <= 105 1 <= nums[i] <= 105

2023-12-10

[二分查找双指针]LeetCode881: 救生艇

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船数 。

2023-12-03

两数之和 - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。 以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。 你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

2023-11-26

C++二分查找算法:132 模式

给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。

2023-11-12

C++算法:第 N 位数字原理、源码、测试用例

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 示例 1: 输入:n = 3 输出:3 示例 2: 输入:n = 11 输出:0 解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。 提示: 1 <= n <= 231 – 1

2023-11-05

C++二分查找算法应用:最长递增子序列 原理、源码、测试用例

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 示例 2: 输入:nums = [0,1,0,3,2,3] 输出:4 示例 3: 输入:nums = [7,7,7,7,7,7,7] 输出:1 参数范围: 1 <= nums.length <= 2500 -104 <= nums[i] <=104

2023-10-29

二分应用:峰值查找 原理、源码、测试用例

1. 题目 长度为n的数组nums,请返回任意一峰值的索引。符合以下条件之一i便是峰值的索引。 n等于1 i等于0 n>1 i等于0 nums[i] >nums[i+1] n>1 i等于n-1 nums[i] > nums[i-1] 0<i<n-1 nums[i]>nums[i-1] nums[i]>nums[i+1] 题目保证nums[i]不等于nums[i+1]。 2. 分析 假定: nums[left,r)符合nums[left]>nums[left-1],且nums[r-1]>nums[r]。显然初始情况nums[0,n)符合。 推论一:如果[left,r)的长度为1,则left就是返回的索引。 推论二:假定left < mid<r。如果mid[mid] > mid[mid-1],则nums[mid,r)也符合假定。如果mid[mid] < mid[mid-1],则nums[left,mid)也符合假定。 推论三:推论二也可以也可以理解成分别抛弃[left,mid)和[mid,r)。令mid = left+(r-left)/2,由于r-left>=2,所以left<mid<

2023-10-22

C++算法:前缀和基础

长度为n的数组nums,共有n+1个以nums[0]开始的子数组。索引范围分别为[0,i),i取值区间[0,n]。preSum[i]记录子数组[0,i)的和。比如:nums = {1,2,3,4},则preSum = {0,1,3,6,10}。通过preSum,我们可以求任意nums的子数组和。子数组[i,j)等于子数组[0,j)减去[0,i),也就是子数组[i,j)的和等于preSum[j] – preSum[i]。如果i等于j,则preSum[i]-preSum[i],和为0,符合计算公式。如果i大于j,则非法,需要提前排除。

2023-10-15

时间复杂度O(40n*n)的C++算法:修改图中的边权

给你一个 n 个节点的 无向带权连通 图,节点编号为 0 到 n - 1 ,再给你一个整数数组 edges ,其中 edges[i] = [ai, bi, wi] 表示节点 ai 和 bi 之间有一条边权为 wi 的边。 部分边的边权为 -1(wi = -1),其他边的边权都为 正 数(wi > 0)。 你需要将所有边权为 -1 的边都修改为范围 [1, 2 * 10^9] 中的 正整数 ,使得从节点 source 到节点 destination 的 最短距离 为整数 target 。如果有 多种 修改方案可以使 source 和 destination 之间的最短距离等于 target ,你可以返回任意一种方案。 如果存在使 source 到 destination 最短距离为 target 的方案,请你按任意顺序返回包含所有边的数组(包括未修改边权的边)。如果不存在这样的方案,请你返回一个 空数组 。 注意:你不能修改一开始边权为正数的边。

2023-10-14

多源最短路径的原理及C++实现

当一层循环执行完后,m_vMat[i1][i2]表示经过[0,i)中的任意个点的最短距离。 初始状态下, m_vMat[i1][i2]表示直达的最小距离,也就是经过0个点。 通过[0,i)中任意个点,i1到i2的最短路径记为PrePathi1i2,通过[0,i+1)中任意个点,i1到i2的距离的路径为Pathi1i2,如果Path不经过Pathi1i2,则和PrePathi1i2相同。如果经过则可以拆分成{i1…i}+{i…i2},显然{i1…i}是PrePathi1i,{i…i2}是PrePathii2,否则替换成PrePathi1i和PrePathii2。 m_vMat同时表示PreMath和Math,如果m_vMat[i1][i]或m_vMat[i][i2]已经更新,会带来错误的结果么?结果是不会,会更新但值不变。 当i1等于i时: m_vMat[i][i2] = min(…, m_vMat[i][i] + m_vMat[i][i2]); 由于m_vMat[i][i]为0,所以右式就是左式。 当i2等于i时,类似。

2023-10-04

堆优化迪氏最短单源路径原理及C++实现

4.1. 时间复杂度 O(ElogE),E是边数。适用与稀疏图。 4.2. 使用前提 边的权为正。可以非连通,非连通的距离为-1。 4.3. 原理 优选队列(小根堆)记录两个数据:当前点到源点距离,当前点。先处理距离小的点;如果距离相等,先处理谁都可以。可以用pair记录,不用重写小于。优先队列只记录如下情况的距离: 一,{0,源点}。 二,任意点的最短距离和可以直达的边。 如果是有向图,则入队数量等于边数,计算出起点最短路径的那一轮。无向图,则翻倍。显然出队数量等于入队数量。优先队列入队和出队时间复杂度都是O(logn),故总时间复杂度为O(nlogn)。

2023-10-03

.有向图计数优化版原理及C++实现

不需要拓扑排序,也不需要并集查找,直接dfs了。完成以下三个职责: 一,DFS那些端点在环上。 二,DFS环上各点此环的长度。 三,DFS非环上各点。

2023-10-02

有向图访问计数的原理及C++实现

现有一个有向图,其中包含 n 个节点,节点编号从 0 到 n - 1 。此外,该图还包含了 n 条有向边。 给你一个下标从 0 开始的数组 edges ,其中 edges[i] 表示存在一条从节点 i 到节点 edges[i] 的边。 想象在图上发生以下过程: 你从节点 x 开始,通过边访问其他节点,直到你在 此过程 中再次访问到之前已经访问过的节点。 返回数组 answer 作为答案,其中 answer[i] 表示如果从节点 i 开始执行该过程,你可以访问到的不同节点数。 2 <= n <= 100000 无自环。

2023-10-01

朴素迪氏最短单源路径的原理及C++源码及测试用例

Dijkstra算法,翻译为迪杰斯特拉或狄克斯特拉。在下驽钝,记不住如此长的翻译,故简称迪氏。 3.1.时间复杂度 O(n2),端点数的平方。 3.2.使用前提 边的权为正。可以非连通,非连通的距离为-1。

2023-09-30

01BFS最短距离原理和C++实现

n个端点的无向图,编号范围[0,n)。Edges0表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有路联接。Edges1表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有损坏的路连接。要想让s和d之间至少有一条通道,最小需要维修多少条路。如果无法到达,请返回-1。可能有环,但无自环,重边,可能不联通。

2023-09-29

深度优先搜索(BFS)的原理和C++实现

n个端点的无向图,编号范围[0,n)。每个端点最多4条出边。edges表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有边联接。求s到d的最少需要经过多少条边。如果无法到达,请返回-1。可能有环,但无自环,重边,可能不联通。

2023-09-28

美丽塔单调栈O(n)解法

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] heights 是一个 山状 数组。 如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组: 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j] 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k] 请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

2023-09-27

较难算法: 美丽塔 时间复杂度O(nlongn)

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] heights 是一个 山状 数组。 如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组: 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j] 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k] 请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

2023-09-24

让数组不相等的最小总代价

让数组不相等的最小总代价 可运行源码,VS2022 C++17 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的和。你的目标是对于所有的 0 <= i <= n - 1 ,都满足 nums1[i] != nums2[i] ,你可以进行 任意次 操作,请你返回达到这个目标的 最小 总代价。请你返回让 nums1 和 nums2 满足上述条件的 最小总代价 ,如果无法达成目标,返回 -1 。

2023-09-23

喜缺全书算法册 C++实现

电子书和博文的分工。电子书以:原理、正确性证明、总结为主;博文(题解)以思路、源码、封装类(模板)、测试用例、流程图为主。 当前阶段:以二分查找为主,前缀和为辅,之后会有其它算法的。文字算法见我的博文,视频算法见我的学院课程。 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的和。你的目标是对于所有的 0 <= i <= n - 1 ,都满足 nums1[i] != nums2[i] ,你可以进行 任意次 操作,请你返回达到这个目标的 最小 总代价。请你返回让 nums1 和 nums2 满足上述条件的 最小总代价 ,如果无法达成目标,返回 -1 。 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的:

2023-09-17

二分查找旋转数组源码和视频

包括视频和三个版本的源码(初始、寻找右数组左边界、完成) 已知整数数组nums,先按升序排序后,再旋转。旋转k位后,元素分别为nums[k],nums[k+1]...nums[0]...nums[k-1]。请查找target 是否存在,如果存在返回所在索引;否则返回-1。假定nums没有重复的元素。 假定排序后的数组为{1,2,3,4,5}。 旋转0位:不变。 旋转1位:{2,3,4,5,1} 旋转2位:{3,4,5,1,2} 旋转3位:{4,5,1,2,3} 旋转4位:{5,1,2,3,4} 1.解题思路 观察后,可以得到如下结论: 旋转数组,可以拆分成左右两个升序数组,且左数组的任意元素都大于右数组的任意元素。 分两步: 一,找到数组的分界线RBegin,[0,RBegin)是左数组,[RBegin,n)是右数组。特殊情况:只有一个升序数组,则RBegin为0,左数组为空。 如果是小于等于nums.back(),在右边找;否则在左边找。升序寻找元素之前已经讲过了,就不累赘了。

2023-08-20

喜缺全书之平凡的经历最新版

《闻缺陷则喜》这本书由何志丹与魏家瑜共同创作,其核心理念是通过暴露和面对问题,促进个人和团队的成长。书名源于作者们对于缺陷的积极态度,他们认为缺陷是学习和进步的契机,而不是阻碍。在当前知识爆炸的时代,分享和交流成为提升效率的关键。 书中涵盖的工作经历部分,作者强调了工作中遇到的挑战和陷阱,这些经历不仅对于技术开发者,如C/C++/VC程序员,具有宝贵的参考价值,也适用于任何行业。作者提到,许多工作中需要但网络上难以找到的信息,正是他们书籍想要填补的知识空白。他们提倡通过阅读、实践和再传授来深化理解和掌握知识,比如,通过反复阅读多本书籍,甚至制作教学视频,以教促学。 生活中的点滴和女儿的成长部分,反映了作者对个人生活和家庭教育的关注。这部分内容可能包含如何平衡工作与家庭,以及如何培养孩子独立思考和解决问题的能力。作者的人生态度和教育观念,可能会给读者提供关于如何在生活中学习和成长的新视角。 投资理财的亏损与教训部分,则揭示了作者在财务管理和投资上的经验和反思。他们可能分享了投资失败的案例,从中提炼出的教训,旨在帮助读者避免同样的错误,提高投资决策的明智程度。这部分内容对于希望提升理

2023-08-18

《闻缺陷则喜》之《主册》

闻缺陷则喜 1 第一章:平凡的经历 5 第二章:观念与想法 5 1. 基础 6 1.1. 认知鸿沟 6 2. 传播 6 3. 沟通 6 3.1. 淡化对错 6 3.2. 不要随意批评别人 6 3.3. 参与感 6 3.4. 如果错了,马上认错 7 3.5. 从别人的立场说服对方 7 3.6. 具体到场景 7 4. 交往与合作 7 4.1. 双赢思维 7 4.2. 合作层次 8 4.3. 能力+信息(情报)+资源=成就 8 5. 工作相关 8 5.1. 金融骗局 8 5.2. 对小白而言创业比股票危险的多 9 5.3. 投资比创业稳妥的多 9 5.4. 程序员干不到30岁 9 5.5. 忠诚度与能力 10 5.6. 拒绝无意义加班 10 5.7. 内卷的历史 11 5.8. 关于社保 11 6. 家庭相关 12 6.1. 我的遗产 12 6.2. 金钱观 12 6.3. 借贷观 13 6.4. 女儿的婚姻 13 6.5. 轶事 14 6.6. 生育观 15 6.7. 教育观 15 6.8. 不要因为担心亲友不舒服,而不指出错误 16 7. 工作技巧 16 7.1. 八二原理 16 8.

2022-09-10

C# 获取C++的连续数据

C# 获取C++的连续数据。 两种方式:1,返回C++指针,2,将值存到C#的数组中。

2022-04-02

闻缺陷则喜版本号20220123

包括:问题定义、系统分析、架构、概要设计、详细设计、测试等!

2022-01-23

闻缺陷则喜2021年12月26.doc

闻缺陷则喜,本人拙作,注将软件工程。

2021-12-26

闻缺陷则喜20211205

包括:问题定义、系统分析、架构、概要设计、详细设计、测试等!

2021-12-07

关于halcon膨胀腐蚀开闭.doc

关于halcon膨胀腐蚀开闭

2021-11-14

简单的C#类 生成对应的C#类

开发工具: C#2013 功能: 针对简单的C#类,生成对应的非托管C++类,并生成托管C++的转换函数。 应用场景: 界面层、数据层C#,逻辑层C++。 简单的C#类:类型只包括 double string List

2021-11-07

Windows性能监控工具Perfmon使用

Windows性能监控工具Perfmon使用

2021-10-31

保存文件的同时删除文件,保存用时会略微升高

保存文件的同时删除文件,保存用时会略微升高。没必要花大功夫专门处理 保存500文件用时(毫秒):30906 删除文件同时,保存500文件用时(毫秒):30263 删除500文件用时(毫秒):363 保存500文件用时(毫秒):29155 删除文件同时,保存500文件用时(毫秒):29258 删除500文件用时(毫秒):426 保存500文件用时(毫秒):27992 删除文件同时,保存500文件用时(毫秒):29068 删除500文件用时(毫秒):686 保存500文件用时(毫秒):29172 删除文件同时,保存500文件用时(毫秒):31837 删除500文件用时(毫秒):337 保存500文件用时(毫秒):29373 删除文件同时,保存500文件用时(毫秒):29563 删除500文件用时(毫秒):321 保存500文件用时(毫秒):29663 删除文件同时,保存500文件用时(毫秒):30180 删除500文件用时(毫秒):350

2021-10-11

闻缺陷则喜2021九月版

主要增加:C#调用托管C++,托管C++调用C++

2021-09-11

多线程样例一 读写参数文件

事情起因: 修改配置后,C++函数取读配置xml时,相机缓存满了而引起崩溃。几率发生。 解决思路: 读文件费时间,所以开一个线程读文件。 抽象后的类似demo: 假定读文件需要0.6秒,图像处理(用存文件代替)需要0.5秒,各执行100次。 类和函数 读取文件函数: 一,List<int>增加本序号(0开始)。 二,随机生成5000整数,加到list<int>中。 三,写文件(文件名为序号,如0.txt),文件夹File。 四,Sleep(600)。 五,记录日志:本函数开始执行 时间,结束时间,序号。 六,复制List<int>到参数。 模拟图像处理函数: 一,复制参数 二,参数保存到文件,文件名list<int>第一个int,文件夹img。 三,Sleep(500)。 六,记录日志:本函数开始执行 时间,结束时间,序号。 参数类(跨线程): 一,从list<int>复制参数。 二,复制数据到list<int>。 线程: 启动线程“读取参数”线程:执行100次 读取参数功能。 启动线程“模拟图像处理”线程:执行100次 模拟图像处理。 运行预期结果: File文件夹中有0到100共101个文件。 img有约80个文件。 img有的文件,File文件夹中一定有,且完全相同。用文件夹比较工具(如:BCompare)查看。 查看日志:“读取参数”线程约60秒完成,模拟图像处理”线程约50秒完成。

2021-09-09

C#调用C++的类和函数

C#直接调用C++的函数,C#调用托管C++,C++托管调用非托管C++

2021-08-31

《闻缺陷则喜》之《软件开发的那些人》 20230917

软件团队的那些人(理论) 4 1. 引言 5 1.1. 你的灯开着么? 5 1.2. 货车过山洞 5 1.3. 软件维护之痛 5 2. 软件过程与思想 6 2.1. 基础 6 2.2. 过程模型 12 2.3. 敏捷开发 14 2.4. 编程范式 15 2.5. 工具 16 3. 问题定义 18 3.1. 基础 18 3.2. 过滤概念(可行性分析) 20 3.3. 用户细分 22 3.4. 模式 22 4. 系统分析 23 4.1. 基础 24 4.2. 用户画像 25 1.1 RFM模型 25 4.3. 需求收集与整理 25 4.4. 系统分析 26 5. 架构设计 26 5.1. 开发期质量 26 5.2. 运行期质量 28 5.3. 沟通 35 5.4. 架构内容 36 5.5. 架构模式 38 5.6. 关于重构 39 5.7. 其它 42 6. 概要设计 44 6.1. 设计模式六大原则 44 6.2. 设计模式 45 6.3. 反模式 46 6.4. 模块划分、公共数据、资源设计、接口 46 6.5. 界面设计 49 6.6. 数据存储设计 49 6.7. 工时预估与工作

2021-08-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除