
sad_liu的刷题记录
文章平均质量分 81
夜深人静写算法
sad_liu
清醒 自律 知进退 明得失
展开
-
8月刷题笔记
pq.pop();这个就体现出了选择好的数据结构解题的重要性了。记住记住:优先队列定义默认是大根堆,也就是堆顶保存的是最大的元素,如果要定义小根堆那么需要加上greater<>默顶大反g以3128为例,枚举三角形的中间,然后通过乘法原理的数学等式来累加直角三角形的个数,主要是发现这个乘法原理吧,再就是对二维矩阵的操作。原创 2024-09-04 20:37:59 · 1418 阅读 · 0 评论 -
7月刷题笔记
刷题笔记—7月1512.好数对的数目(哈希)class Solution {public: int numIdenticalPairs(vector<int>& nums) { int cnt = 0; unordered_map<int, int> hash;//nums[i]---个数 for(int i = 0; i < nums.size(); i++) { cnt += ha原创 2024-09-04 20:37:16 · 1485 阅读 · 0 评论 -
6月刷题笔记
unordered_map:unordered_set:map是自己写的,set是灵神写的,真神啊没话说,我的map其实就是模拟的set的初始化,思路是一样的,但是不同的数据结构用起来展现的简洁程度果然还是不一样。简单题模拟,思考的时候想复杂了,想用前缀和或者差分数组来写的,主要是特点太像了,但是想不出怎么运用到里面去,最后还是用模拟来写,也还好只用一个for循环。这一题的精华语句在于简洁且明了,%num_people是为了数组要在0-num_people-1的范围内,确保数组不越界的写法可以学一学,原创 2024-06-29 12:41:58 · 1168 阅读 · 0 评论 -
刷题记录5.22-5.27
这一题属于是二刷了,最开始看灵神的讲解看不懂,就开始跟着卡尔的步伐了,现在回过头来看灵神的解法确实还是比卡尔的简洁很多,主要是省略的步骤我也能分析出来了,比如lambda表达式之类的,回过头来看确实容易理解了许多。这里的dfs其实就是充当了卡尔所讲的backtracking,这里的i表示的是i层递归,递归出口就是到达digits.size()的时候递归退出。由于这里的每个path都是等长的,所以它初始化path的时候固定为n,添加路径的时候也是直接path[i] = c覆盖掉,其实也就等价于之前所写的pat原创 2024-05-27 21:33:42 · 1070 阅读 · 0 评论 -
刷题记录5.14-5.20
这里是将前缀和与哈希表结合起来的应用,还是很有价值的一道题!这里hash是map类型的哈希表,我当时考虑下标越界的情况,实际上是不会的,它只是int到int类型的映射,只需要[]内的数值在int的范围内,都是能表示的,例如hash[-1]的值初始化就是0,所以根本不需要对hash进行判断溢出的操作。还有一个值得注意的点:循环里一定要是hash[sum]++这一条语句为先,因为最开始前缀和是为0的。每次res累加的是[0,i]的前缀和,goal用(i,j]来表示,sum值表示[0,j]的前缀和这个题与前面的原创 2024-05-20 21:23:28 · 931 阅读 · 0 评论 -
刷题记录5.10-5.13
public://左闭右闭区间//如果数组为空,返回{-1, -1}//两个条件分别是://1、数组中的所有元素都小于target//2、找到了第一个大于等于target的值了,只不过不是target,而是第一个大于target的值,即数组中不存在target值。这一题已经是三刷了,结果还是能出错。。。感觉还是理解的不够透彻,每刷一遍都有新的理解,这一题实在是二分的经典!原创 2024-05-13 23:52:47 · 632 阅读 · 0 评论 -
刷题记录2
删除字符串中的所有相邻重复项、逆波兰表达式求值、滑动窗口最大值、二叉树前序遍历(145、94后序、中序)、二叉树的层序遍历、翻转二叉树、对称二叉树、二叉树的最大深度、二叉树的最小深度、完全二叉树的节点个数原创 2024-05-09 22:41:32 · 534 阅读 · 0 评论 -
刷题记录4.17-5.6
移除元素、有序数组的平方、长度最小的子数组、设计链表、反转链表、两两交换链表中的节点、删除链表的倒数第N个节点、环形链表II、有效的字母异位词、两个数组的交集、四数相加II、四数之和、反转字符串中的单词、重复的子字符串原创 2024-05-06 18:38:09 · 801 阅读 · 0 评论 -
15届蓝桥备赛(5)
打家劫舍、得到更多分数的最少关卡数目、买卖股票的最佳时机、买卖股票的最佳时机II、买卖股票的最佳时机III、最长递增子序列、最长重复子数组、最长公共子序列、判断子序列、不同的子序列、两个字符的删除操作、编辑距离、回文子串、最长回文子序列原创 2024-04-06 10:43:20 · 1850 阅读 · 0 评论 -
15届蓝桥备赛(4)
动态规划、01背包、使用最小花费爬楼梯、整数拆分、不同的二叉搜索树、分割等和子集、最后一块石头的重量II、目标和、一和零、完全背包、零钱兑换II、组合总和IV零钱兑换、完全平方数、单词拆分原创 2024-03-30 20:16:57 · 965 阅读 · 0 评论 -
15届蓝桥杯备赛(3)
回溯算法、组合、组合总和III、电话号码的字母组合、组合总和、组合总和II、分割回文串、子集、子集II、非递减子序列、全排列、全排列II、贪心算法、分发饼干、最大子数组和、买股票的最佳时机II、跳跃游戏原创 2024-03-25 13:25:20 · 2208 阅读 · 0 评论 -
15届蓝桥杯备赛(2)
二分查找、在排序数组中查找元素的第一个和最后一个位置、寻找旋转排序数组中的最小值、搜索旋转排序数组、反转链表、反转链表II、相同的树、对称二叉树、平衡二叉树、二叉树的右视图、验证二叉搜索树、二叉树的最近公共祖先、二叉搜索树的最近公共祖先、二叉树层序遍历、二叉树的锯齿形层序遍历、找树左下角的值原创 2024-03-18 15:06:38 · 1085 阅读 · 0 评论 -
15届蓝桥杯备赛
两数之和、刷题统计、贪心、重新分装苹果、幸福值最大化的选择方案、相向双指针、三数之和、盛最多水的容器、接雨水、同向双指针(滑动窗口)、长度最小的子数组、乘积小于k的子数组、无重复字符的最长字串、动态规划、不同路径、最小路径和、不同不同路径II、三角形最小路径和原创 2024-03-13 20:12:08 · 1010 阅读 · 1 评论 -
队列的最大值、解密数字、珠宝的最高价值、招式拆解(无重复字符的最长字串)、丑数
这里使用的find函数是c++中STL内置算法,其返回值是迭代器,找到了就返回该位置的迭代器,没找到就返回末尾迭代器。卡壳点就在下标的关系是模糊的,需要自己设定,而并不是一定与前一个数据有倍数上的关系,而是与前面中的某个数有关系。总结:该方法解决了我最初想法卡壳的地方,就是寻找其左边相同字符的下标,应当从j-1的位置向左边遍历,所以告诉我们做题不能一贯性思维。d.empty() && d.back() < value)确保双端队列里是非递减的,值得注意的是,不能写成d.back()原创 2023-10-02 07:08:27 · 79 阅读 · 0 评论 -
用两个栈实现队列、反转链表、包含min函数的栈
这里最开始误以为是需要自己定义一个栈,结果并不是,在min函数中出现了问题:使用冒泡排序让时间超时了。此题方法是在类中使用两个栈,a记录传入的数据,b记录更新的最小值。当出栈时,出栈元素是最小元素a,b栈都需要出栈,此时b栈顶元素更新,最小值也跟着变化。第一遍遍历,对于每个节点 cur,创建一个新节点,值和 cur 相同(构造函数体现了出来),并将新节点存入哈希表 map 中,建立原节点到新节点的映射关系。两次的栈操作就相当于了先入先出,需要注意的是:每次取出完一个数据之后,就需要将b栈再重新压回a栈。原创 2023-07-23 19:21:04 · 119 阅读 · 0 评论 -
替换空格、从尾到头打印链表
思路在:新字符串长度 = 原字符串长度 + 2 * 空格个数,然后从后往前遍历填好新数组的空,并且这里需要两个游标变量i和j。依据题意,该链表是个单向链表只有next指针,所以只能从前往后遍历。想要达到从后往前的效果可以利用辅助栈法和递归的思想。原创 2023-07-22 17:10:19 · 76 阅读 · 0 评论 -
【力扣刷题】---动态规划746. 使用最小花费爬楼梯、1137. 第 N 个泰波那契数
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2。输入:cost = [1,100,1,1,1,100,1,1,100,1]支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。支付 1 ,向上爬一个台阶,到达楼梯顶部。原创 2023-06-12 15:42:12 · 71 阅读 · 0 评论 -
【数据结构】---发纸牌、八皇后问题、memset出现的错误
确实,memset 函数并不适用于初始化动态分配的数组,因为它只能对连续内存块进行填充。你提到的问题是关于使用 memset 初始化动态分配的数组的正确性。在这种情况下,我们需要使用其他方法来初始化动态分配的数组。解决办法:for循环、fill函数(代码注释中已实现)原创 2023-06-07 23:18:15 · 73 阅读 · 0 评论 -
数据结构、算法题联系(BFS广度优先、动态规划、并查集、一维前缀和、二分查找)
该算法流程大致如下:先将初始位置记录下来入队(队列元素包括三要素:起点坐标x,y和步骤,所以这里定义了一个结构体,然后queue容器以该结构体为模板),循环结束的标志是队列为空或者找到该最短步骤。absabd中的absa 因为bs是false 那么absa也是false,就是利用字串bs为false直接推出absa为false,而不用再重新判断其是否为回文串。经过调试之后发现是数组v的索引出了问题,因为数组下标是从0开始的,所以应当也要对第0行和第0列进行初始化,如示例一。共m行,每行输出一个询问的结果。原创 2023-06-01 22:50:24 · 140 阅读 · 0 评论 -
【数据结构】线性表应用举例--链表实现约瑟夫环和一元多项式求和
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式:41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。为了使计数器从1开始计数,采用尾指针指示的循环单链表,将指针pre初始化为指向终端节点,将指针p初始化为指向开始节点。N = 5, M = 3时出圈次序:3,1,5,2,4。原创 2023-05-19 12:50:52 · 196 阅读 · 0 评论 -
【蓝桥杯】
给定 n 个整数 a1, a2, · · · , an ,求它们两两相乘再相加的和,即 S = a1 · a2 + a1 · a3 + · · · + a1 · an + a2 · a3 + · · · + an-2 · an-1 + an-2 · an + an-1 · an.观察式子的规律:可以提公因式S=a1·a2+(a1+a2)·a3+(a1+a2+a3)·a4+···+(a1+a2+a3+···+an-2+an-1)·an。需要注意的是 这里提完公因式后一共只有 n-1项,这是循环的边界。原创 2023-03-28 22:24:27 · 440 阅读 · 0 评论 -
LeetCode1.两数之和
执行用时180ms,内存消耗9.8MB。这里用的是两层for循环实现的暴力算法,时间复杂度为O(n^2)。看到进阶,就去试了试时间复杂度更小的算法。进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?使用哈希表之后执行用时明显少了很多,但内存空间的消耗会增大。(图来源于LeeCode id:画手大鹏)原创 2023-04-21 23:33:59 · 53 阅读 · 0 评论 -
括弧的匹配
先将{存入栈中,进入循环发现(与{不匹配那么(也入栈,进入下一循环发现 ( 与 )相匹配那么(出栈进入下一次循环…思路:可以用栈的知识解决。利用栈先进后出的特征解决此题。主要流程如下: 以"{()[[]]}"为例。原创 2023-04-26 19:14:15 · 99 阅读 · 0 评论