
leetCode耐刷王
文章平均质量分 54
man!what can I 刷?
Daking-
这位更是重量级:喜欢打码写算法撕数据结构的某非科班大二佬。
展开
-
力扣第71题:简化路径 放弃栈模拟,选择数据流√(C++)
震撼的C++输入输出流运用原创 2024-08-26 22:44:12 · 849 阅读 · 0 评论 -
力扣第45题:跳跃游戏 贪心DP(C++)
DP数组的实现就不必多说了,无非是dp[i]=dp[j]+1(到i的最少步数是j的步数+1,其中j是前面的所有能跳到i的位置里步数最少的)只是还不知道j是多少而已。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。注意,在j处能跳到的最远位置是下标j+nums[j]的位置。如果j不能跳到i,那么i就大于这个最远位置。思考一个问题:如果在位置j不能跳到位置i(j原创 2024-08-06 20:48:17 · 615 阅读 · 0 评论 -
力扣第120题:三角形最短路径和 二维DP逐行求解(C++)
对于第i行第j列的最优解,有dp[i][j]=min(dp[i-1][j],dp[i-1][j-1])+triangle[i][j]。表示dp数组最初有一行一列(vector(1)无名vector表示第一行有1个值),赋值为triangle[0][0]。需要注意列遍历在最左侧或最右侧时dp[i][j]直接等上一层的对应位置+triangle[i][j]。自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。用二维数组dp表示三角形每个位置的最优解。三角形的每一行都由上一行的最优解决定。原创 2024-08-04 22:08:10 · 237 阅读 · 0 评论 -
力扣第121题:买卖股票的最佳时机 维护最低值(C++)
反之如果prices[i]大于low则判断prices[i]-low是否比ans更大,更新ans。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。同时,你不能在买入前卖出股票。定义low=prices[0],ans=0,for循环从i=1开始,适时更新low和ans。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。记录当前遍历得到的最低值low和已知最大利润ans,原创 2024-07-30 15:44:36 · 170 阅读 · 0 评论 -
力扣第107题:二叉树的层序遍历 II 队列广搜与栈缓存(C++)
每次外层循环循环定义int len=队列的当前长度,通过内层循环while(len--)来保证队列内的值全部更新一次,内层循环中依次取出队头后加入到layer数组中,判断其左子树和右子树是否需要入队(空节点不入队)。que.empty())外层循环,我们的每一次外层循环都完成一层搜索,定义layer数组来储存每一层的搜索结果。每完成一次外层循环,队列中的每个元素都向他的左右子树演替了一次,队列清空后即搜索结束。我们将每一层的搜索结果入栈,生成答案时依次出栈就得到了倒序的层序遍历结果。最后清空栈返回答案。原创 2024-07-17 18:39:01 · 414 阅读 · 0 评论 -
力扣第38题:外观数列 奇技淫巧模拟(C++)
定义第一代string ans="1",然后从第二代开始模拟,循环过程中进行cnt计数,如果下一个字符不再和当前字符相等,就把cnt和ans[i]追加到下一代temp中.(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。countAndSay(3) = "11" 的行程长度编码 = "21"countAndSay(2) = "1" 的行程长度编码 = "11"为了防止i+1溢出,定义string s=ans+'x',x是占位符。原创 2024-07-14 22:31:48 · 855 阅读 · 0 评论 -
力扣第46题:全排列 库函数next_permutation与sort介绍()
next_permutation可以将区间内的值向降序排列演替一步,一直到区间变为降序排列位置。在这个过程中会生成整个区间的全排列,如果区间已经是降序排列,那么返回false值,否则返回true值。定义ans保存答案,先利用sort进行升序排序,(否则next_permutation只产生当前状态之后的排列而不是全排列),初始状态压入ans之后循环生成答案即可。(最后一次循环会生成降序排列(此时返回true),之后再次进入循环才返回false所以不会丢答案)sort函数可以将区间内进行升序排列;原创 2024-07-10 22:24:58 · 247 阅读 · 0 评论 -
力扣第70题:爬楼梯 动态规划DP入门(C++)
我们开始遍历,从i=3开始,我们对ans[i]施加状态转移方程ans[i]=ans[i-1]+ans[i-2],什么意思呢?走到第i个台阶的方法是走到第i-1个台阶的方法和第i-2个台阶的方法之和。我们分割原始问题为多个子问题,在遍历数据的过程中,如果能根据之前得到的信息动态解决当前的子问题,那么就可以在线性时间内解决很多需要多次遍历的问题。对于本题目,他的dp表中ans[0]=0,ans[1]=1,ans[2]=2,此为初始状态。本题中定义ans[i]为dp表,表示走到第i个台阶的方法数。原创 2024-07-09 14:22:44 · 389 阅读 · 0 评论 -
力扣第19题:删除链表的倒数第N个结点 记忆化存取(C++)
遍历结束后,访问address中下标为address.size()-n-1的位置,他是第n个结点的上一个节点(注意address的长度比原链表长度大1个节点,address[0]是我们申请的新头结点),将address.size()-n位置的的next指针与之连接,即抛弃了address.size()-n这个节点。构造vectoraddress(1,ans),它当前长度为1,存入了我们新申请的头结点。申请一个新的头结点,与原始链表相连,防止空链表数据的输出异常。原创 2024-07-08 16:04:56 · 479 阅读 · 0 评论 -
力扣第7题:整数反转 字符串函数综合运用(C++)
strcmp(char *str1,char *str2)按字典序逐个比较str1和str2,到某个字符时str1大于str2则返回正数,完全一致则返回零,否则返回负数(与长度无关,只取决于对应位置的字符大小关系,如"ab"大于"aaa")reverse(a或begin(),a+n或end())将容器a到a+n(或begin到end的左闭右开区间的内容翻转)stoi(char *str)将由str[0]开始的完全由数字和正负号组成的子串转换为其书面意义上的数字。中的数字部分反转后的结果。原创 2024-07-06 22:59:12 · 382 阅读 · 0 评论 -
力扣第22题:括号生成 深度优先搜索(DFS)和它的优化(C++)
对于这道题目,DFS一开始接收到空字符串,然后进入函数体后判断剪枝情况(我们可以利用已知信息来判断继续向下探还能否得到结果的可能性),然后分别递入下一级DFS(两个分支分别加上左括号'('和右括号')')。想象一个矿井,从地面到井底有多层平台,每层平台都能从此处向下连接到一个不同的矿底,我们先一路探到底,发现最底部无矿后再向上爬一个平台,然后走向这个平台连接的矿底。我们定义l和r记录左右括号的当前数量,如果 右括号多于左括号||右括号多于n个||左括号多于n个 都不可能得到一个拥有全部由小括号的字符串了。原创 2024-07-06 21:52:02 · 439 阅读 · 1 评论 -
力扣第6题:Z字形变换 交替V和Λ规律法(C++)
我们利用两层循环逐层求解即可,外层循环表示当前层,内层循环交替变换A和Λ(注意i==0始终为V和inumRows-1始终为Λ,两种情况不变换)我们画V字时,坐标移动长度=(2numRows-1)-2(i+1)+1 (最大V字的长度-缩短的长度+(当前在i位置不算)),以从上往下、从左到右进行 Z 字形排列。同样的,可以发现画Λ时坐标移动2i的长度。在线性时间内用找规律快速求解。关流后实测击败全世界。原创 2024-07-02 23:20:02 · 473 阅读 · 0 评论 -
力扣第4题:寻找两个正序数组的中位数 库函数nth_element介绍(C++)
nums1.insert(num1.end(),num2.begin(),num2.end()),将整个向量组2追加到向量1的后面,利用nth_element排中位数,判断向量长度的奇偶,选择直接输出中位数还是求平均值。它的作用是:将区间中第n小的元素排在第n个位置上(升序排列)(注意不是整个区间排序,这个函数只保证第n个元素的正确)例如 有数组a,则nth_element(a,a+2,a+4)会将前四个数中第3小的数排在第3位(合并数组 = [1,2,3] ,中位数 2。实测击败90.5%。原创 2024-06-30 23:00:51 · 314 阅读 · 0 评论 -
力扣第1题:两数之和 极简一遍哈希表解法(C++)
unordered_map是c++提供的stl模版,提供一对一的键值对映射,对于一个unordered_maphash,hash[key]将会访问到这个key所对应的值。我们注意到一个性质:对一于一个未录入map的key值,直接写下如下代码hash[key]将会插入这个key并将hash[key]初始化为0,有了这个性质,我们就可以耍点花招来判断之前是否录入过key。我们用hash[a]=b表示数组中的a出现在b位置上,即翻转了原数组的键值对关系。实测击败97.7%。原创 2024-06-30 03:23:26 · 271 阅读 · 0 评论