- 博客(226)
- 收藏
- 关注
原创 力扣 - 回文子串
之前做过中心扩展的方法,有点印象,我采用的是分奇数个字符和偶数个字符两种情况来写,比较好理解,没有像官方题解一样使用一次遍历。
2022-09-28 20:59:48
187
原创 最小生成树算法的相关变形题
由于吉大近几年的考试中,算法大题里频繁地出现最小生成树算法的变形题,因此在此整理一下。PS:prim算法不管是画图还是代码题真的难用,kruskal算法才是永远滴神。
2022-08-30 22:32:36
1841
6
原创 程序设计-红皮书代码题记录
目录将一个正整数分解质因数 讲义P25辗转相除法 讲义P30给出年月日,计算该日是该年的第几天 讲义P32进制转换讲解 讲义P56打印集合M的前面100个最小数 讲义P59输入正整数n,打印集合的所有子集 讲义P61求所有元素个数为M的子集 讲义P67实现任意两个不同进制非负整数之间的转换 讲义P68交换两个向量的位置 讲义P80示例: 打印如下: 非递归写法:更为简便的递归写法:按讲义上的写法来的,主要是在于数据的健壮性判断十分繁琐 讲义上的代码写得不好,于是在网上搜到了这一种很有
2022-06-25 22:57:00
3745
5
原创 数据结构-第七章 查找-笔记
目录分块查找存储的结构特点查找过程查找效率分析没用过分块查找,还真没啥印象主要区别在于查找分块时采用的是顺序还是二分,顺序查找不用多说,下面介绍一下比较特殊的二分查找使用二分法查找分块时,一般会出现“查找失败”的情况,但这时一定要在low所指的分块中继续查找。其原因在于二分法查找失败时,最终的low = high + 1,此时所要查找的关键值大小介于high和low所指的元素之间,例如图中的19最终介于high所指向的10和low所指向的20之间,但是这时不应该结束查找,因为按照分块查找的存储结构特点,每个
2022-06-08 23:54:46
384
原创 数据结构-第六章 图-笔记
目录邻接矩阵的阶乘性质例一:例二:图的存储邻接矩阵法邻接表法邻接矩阵的阶乘性质假设有图如下所示:例一:如图所示,A²[1][4]表示的是从A到D长度为2的路径数目,即用左矩阵的第一行与右矩阵的第4列作内积。为1表示A->B有1条长度为1的路径,为1表示B->D有一条长度为1的路径,它们相乘为1,说明A->D有一条长度为2的路径。完整结果如下:例二:左矩阵为A²,右矩阵为A,则A³[1][4]表示的是从A到D的长..
2022-05-29 00:01:00
1240
原创 数据结构-第五章 树与二叉树-笔记
5.2.3 课后习题最近公共祖先将一棵二叉树按顺序结构存储,求编号为i和j的两个结点的最近公共祖先节点的值我首先想到了之前在力扣上写过的求二叉树中最近公共祖先的题目:(11条消息) 2021.10.9 力扣-二叉树的最近公共祖先_作用太大了销夜的博客-优快云博客于是按照这个思路写了出来:node nodes[maxsize];int length; //二叉树的最后一个结点的编号int findancestor(int cur, int i, int j){ ..
2022-05-15 22:37:14
1988
5
原创 数据结构-第四章 串-笔记-吉大KMP算法与一般KMP算法的区别
串的模式匹配朴素模式匹配算法//若主串S中存在与串T相同的子串,则返回它在主串S中第一次出现的下标,否则返回-1int Index(string S, string T){ int k = 0; int i = k, j = 0; while (i < S.size() && j < T.size()) { if (S[i] == T[j]) { i++; j++; } else { k++; i = k;
2022-05-12 23:06:28
976
原创 数据结构-第三章 栈、队列和数组-笔记
目录自定义的栈和队列的实现栈的顺序存储队列的顺序存储队列的链式存储栈在括号匹配中的应用栈在表达式求值中的应用自定义的栈和队列的实现栈的顺序存储#define maxsize 10struct sta{ int data[maxsize]; int top; //top指向栈顶元素};//栈的初始化void InitStack(sta& s){ s.top = -1;}//判断栈是否为空bool StackEmp
2022-05-01 21:33:58
751
原创 数据结构-第二章 线性表-笔记
目录2011考研真题-求两个升序数组的中位数2020考研真题-三元组中的最小距离使用尾插法建立链表和头插法逆置链表2.3 线性表的链表表示-课后习题链表的初始化1、递归算法,删除不带头结点的单链表L中所有值为X的结点5、将带头结点的链表就地逆置6、递增排序单链表8、找出两个单链表的公共结点10、将单链表A分解成两条单链表A和B,A中存放序号为奇数的元素,B中存放序号为偶数的元素13、将两个递增排序的单链表,合并为一个递减排序的单链表14、两个单链表A和B递增有
2022-05-01 19:41:43
691
原创 2022.4.7 力扣-连接所有点的最小费用-最小生成树练习
目录题目描述:样例:方法一(普利姆算法-prim算法)本文参考:(5条消息) 数据结构--最小生成树详解_Ouyang_Lianjun的博客-优快云博客_最小生成树Prim and Kruskal(并查集) - 连接所有点的最小费用 - 力扣(LeetCode) (leetcode-cn.com)题目描述:给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。连接点 [xi, yi] 和点 [xj, yj] 的费用
2022-04-07 21:46:12
1113
1
原创 2022.3.13 力扣-每日一题-UTF-8 编码验证
题目描述:给定一个表示数据的整数数组 data ,返回它是否为有效的 UTF-8 编码。UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:对于 1 字节的字符,字节的第一位设为 0 ,后面 7 位为这个符号的 unicode 码。对于 n 字节的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 unicode 码。这是 UTF-8 编码的工作方式:...
2022-03-13 14:15:38
1044
原创 2022.2.14 力扣-每日一题-有序数组中的单一元素
题目描述:给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。样例:方法一(位运算):class Solution {public: int singleNonDuplicate(vector<int>& nums) { int a = 0; for (int num : n
2022-02-14 15:10:49
436
原创 2022.2.8 力扣-每日一题-网格照明
题目描述:在大小为 n x n 的网格 grid 上,每个单元格都有一盏灯,最初灯都处于 关闭 状态。给你一个由灯的位置组成的二维数组lamps ,其中 lamps[i] = [rowi, coli] 表示 打开 位于 grid[rowi][coli] 的灯。即便同一盏灯可能在 lamps 中多次列出,不会影响这盏灯处于 打开 状态。当一盏灯处于打开状态,它将会照亮 自身所在单元格 以及同一 行 、同一 列 和两条 对角线 上的 所有其他单元格 。另给你一个二维数组 queries ,其中.
2022-02-08 15:54:51
525
原创 2022.2.7 力扣-每日一题-最长快乐字符串
题目描述:如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:s 是一个尽可能长的快乐字符串。s 中 最多 有a 个字母 'a'、b个字母 'b'、c 个字母 'c' 。s 中只含有 'a'、'b' 、'c' 三种字母。如果不存在这样的字符串 s ,请返回一个空字符串 ""。样例:方法一:class Solution {p.
2022-02-07 18:45:15
656
原创 2022.2.3 力扣-每日一题-和为 K 的最少斐波那契数字数目
题目描述:给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。斐波那契数字定义为:F1 = 1F2 = 1Fn = Fn-1 + Fn-2, 其中 n > 2 。数据保证对于给定的 k,一定能找到可行解。样例:方法一:class Solution {public: int findMinFibonacciNumbers(int k) { vector<int> f = {1, ..
2022-02-03 15:32:24
387
原创 2022.2.1 力扣-每日一题-最长的美好字符串
题目描述:当一个字符串 s包含的每一种字母的大写和小写形式 同时出现在 s中,就称这个字符串s是 美好 字符串。比方说,"abABB"是美好字符串,因为'A' 和'a'同时出现了,且'B' 和'b'也同时出现了。然而,"abA"不是美好字符串因为'b'出现了,而'B'没有出现。给你一个字符串s,请你返回s最长的美好子字符串。如果有多个答案,请你返回最早出现的一个。如果不存在美好子字符串,请你返回一个空字符串。样例:方法一:class...
2022-02-01 14:32:48
699
原创 2022.1.29 力扣-每日一题-地图中的最高点
题目描述:给你一个大小为m x n的整数矩阵isWater,它代表了一个由 陆地和 水域单元格组成的地图。如果isWater[i][j] == 0,格子(i, j)是一个 陆地格子。如果isWater[i][j] == 1,格子(i, j)是一个 水域格子。你需要按照如下规则给每个单元格安排高度:每个格子的高度都必须是非负的。如果一个格子是是 水域,那么它的高度必须为 0。任意相邻的格子高度差 至多为 1。当两个格子在正东、南、西、北方向上相互紧挨...
2022-01-29 14:17:17
1026
原创 2022.1.28 力扣-每日一题-游戏中弱角色的数量
题目描述:你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色 i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defensei 。返回
2022-01-28 15:18:50
3542
原创 2022.1.26 力扣-每日一题-检测正方形
题目描述:给你一个在 X-Y 平面上的点构成的数据流。设计一个满足下述要求的算法:添加 一个在数据流中的新点到某个数据结构中。可以添加 重复 的点,并会视作不同的点进行处理。给你一个查询点,请你从数据结构中选出三个点,使这三个点和查询点一同构成一个 面积为正 的 轴对齐正方形 ,统计 满足该要求的方案数目。轴对齐正方形 是一个正方形,除四条边长度相同外,还满足每条边都与 x-轴 或 y-轴 平行或垂直。实现 DetectSquares 类:DetectSquares() 使用空数据结构初
2022-01-26 13:59:45
246
原创 2022.1.23 力扣-每日一题-股票价格波动
题目描述:给你一支股票价格的数据流。数据流中每一条记录包含一个 时间戳和该时间点股票对应的 价格。不巧的是,由于股票市场内在的波动性,股票价格记录可能不是按时间顺序到来的。某些情况下,有的记录可能是错的。如果两个有相同时间戳的记录出现在数据流中,前一条记录视为错误记录,后出现的记录 更正前一条错误的记录。请你设计一个算法,实现:更新 股票在某一时间戳的股票价格,如果有之前同一时间戳的价格,这一操作将更正之前的错误价格。找到当前记录里 最新股票价格。最新股票价格定义为时间戳最晚...
2022-01-23 14:32:15
318
原创 2022.1.23 力扣-周赛-基于陈述统计最多好人数
题目描述:游戏中存在两种角色:好人:该角色只说真话。坏人:该角色可能说真话,也可能说假话。给你一个下标从 0 开始的二维整数数组 statements ,大小为 n x n ,表示 n 个玩家对彼此角色的陈述。具体来说,statements[i][j] 可以是下述值之一:0 表示 i 的陈述认为 j 是 坏人 。1 表示 i 的陈述认为 j 是 好人 。2 表示 i 没有对 j 作出陈述。另外,玩家不会对自己进行陈述。形式上,对所有0 <= i < n ,都有 state.
2022-01-23 13:02:43
2545
原创 2022.1.22 力扣-每日一题-删除回文子序列
题目描述:给你一个字符串 s,它仅由字母 'a' 和 'b' 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。样例:方法一:class Solution {public: int removePa
2022-01-22 12:15:30
337
原创 2022.1.21 力扣-每日一题-跳跃游戏 IV
目录题目描述:样例:错误解法(无优化的单向bfs):方法一(双向bfs):方法二(单向bfs+简单优化):题目描述:给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。每一步,你可以从下标 i 跳到下标:i + 1满足:i + 1 < arr.lengthi - 1满足:i - 1 >= 0j满足:arr[i] == arr[j]且i != j请你返回到达数组最后一个元素的下标处所需的最少操作次数。注意:任何时候你都...
2022-01-21 13:01:20
3026
原创 2022.1.19 力扣-每日一题-存在重复元素 II
题目描述:给你一个整数数组nums 和一个整数k ,判断数组中是否存在两个 不同的索引i和j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。方法一(哈希表):class Solution {public: bool containsNearbyDuplicate(vector<int>& nums, int k) { unordered_ma...
2022-01-19 14:25:11
430
原创 2022.1.17 力扣-每日一题-统计元音字母序列的数目
题目描述:给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串:字符串中的每个字符都应当是小写元音字母('a', 'e', 'i', 'o', 'u')每个元音'a'后面都只能跟着'e'每个元音'e'后面只能跟着'a'或者是'i'每个元音'i'后面不能 再跟着另一个'i'每个元音'o'后面只能跟着'i'或者是'u'每个元音'u'后面只能跟着'a'由于答案可能会很大,所以请你返回 模10^9 + 7之后的结果。样...
2022-01-17 15:26:16
231
原创 2022.1.16 力扣-每日一题-链表随机节点
题目描述:给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。实现 Solution 类:Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有节点被选中的概率相等。方法一:/** * Definition for singly-linked list. * struct ListNode { * int val; * L
2022-01-16 20:27:14
283
原创 2022.1.16 力扣-周赛-得到目标值的最少行动次数-死套模板是大忌
题目描述:你正在玩一个整数游戏。从整数 1 开始,期望得到整数 target 。在一次行动中,你可以做下述两种操作之一:递增,将当前整数的值加 1(即, x = x + 1)。加倍,使当前整数的值翻倍(即,x = 2 * x)。在整个游戏过程中,你可以使用 递增 操作 任意 次数。但是只能使用 加倍 操作 至多 maxDoubles 次。给你两个整数 target 和 maxDoubles ,返回从 1 开始得到 target 需要的最少行动次数。方法一:class Solut
2022-01-16 18:20:36
1083
原创 2022.1.15 力扣-每日一题-查找和最小的k对数字 及优先队列的自定义排序方法
题目描述:给定两个以 升序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。请找到和最小的 k 个数对 (u1,v1), (u2,v2) ... (uk,vk) 。样例:方法一:class Solution {public: struct Node { int i, j; //分别表示nums1中的下标和nums2中的下标 .
2022-01-15 12:14:40
255
原创 2022.1.12 力扣-每日一题-递增的三元子序列
题目描述:给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。样例:方法一:class Solution {public: bool increasingTriplet(vector<int>& nums) { .
2022-01-12 15:28:46
346
原创 2022.1.11 力扣-每日一题-逃离大迷宫
题目描述:在一个 106 x 106 的网格中,每个网格上方格的坐标为(x, y) 。现在从源方格source = [sx, sy]开始出发,意图赶往目标方格target = [tx, ty] 。数组 blocked 是封锁的方格列表,其中每个 blocked[i] = [xi, yi] 表示坐标为 (xi, yi) 的方格是禁止通行的。每次移动,都可以走到网格中在四个方向上相邻的方格,只要该方格 不 在给出的封锁列表blocked上。同时,不允许走出网格。只有在可以通过一系列的...
2022-01-11 23:05:45
547
原创 2022.1.10 力扣-每日一题-累加数
题目描述:累加数 是一个字符串,组成它的数字可以形成累加序列。一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。给你一个只包含数字'0'-'9'的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。说明:累加序列里的数 不会 以 0 开头,所以不会出现1, 2, 03 或者1, 02, 3的情况。样例:方法一:class Solution ...
2022-01-10 18:29:30
326
原创 2022.1.10 力扣-字符串相加
今天的每日一题整不出来了,看了题解要用到字符串相加的方法,于是先来练练这道题题目描述:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。方法一:class Solution {public: string addStrings(string num1, string num2) { while (num1.si
2022-01-10 16:27:44
359
原创 2022.1.9 力扣-周赛-统计追加字母可以获得的单词数
哭了,经典卡在第三题一个小时,看了题解后真想给自己来一巴掌题目描述:给你两个下标从 0 开始的字符串数组 startWords 和 targetWords 。每个字符串都仅由 小写英文字母 组成。对于 targetWords 中的每个字符串,检查是否能够从 startWords 中选出一个字符串,执行一次 转换操作 ,得到的结果与当前 targetWords 字符串相等。转换操作 如下面两步所述:追加 任何 不存在 于当前字符串的任一小写字母到当前字符串的末尾。例如,如果字符串为 "a
2022-01-09 12:36:43
544
原创 2022.1.6 力扣-每日一题-简化路径
题目描述:样例:方法一:class Solution {public: string simplifyPath(string path) { vector<string> curstr; string temp; stringstream ss; ss << path; while (getline(ss, temp, '/')) {
2022-01-06 15:35:33
546
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅