- 博客(5)
- 收藏
- 关注
原创 二分查找:5道题目
第三种情况下,[1,3,5,7]中,mid为1下标的“3”,小于“8”,left指针往右边走,把“3”及之前的数值舍弃掉,剩下[5,7],此时mid为2下标的“5”,小于“8”,left指针继续往右边走,剩下[7],仍然小于“8”,left继续向右走,即 [7]我们来看这个数组,[5,7,7,8,8,10],target=8,我们可以分成这样,[5,7,7][8,8][10],我们同样也给它们加入left和right指针,[5,7,7][8,8][10]
2025-03-26 22:32:51
1608
原创 基础排序算法:选择排序、冒泡排序和插入排序
用双指针固定数和遍历是有一个技巧的,我们来看选择排序:0~n-1, 1~n~1, 2~n-1...,由此可见,在一次大循环(外层循环)中,变的是开头的数,此时我们的指针 i 就需要部署在外层循环中,即指针 i 指向一轮循环中只需要改变一次的数字,之后的指针 i 在关于指针 j 的循环中(内层循环)是不需要变动的。总结出一个结论:指针 i 指向慢变动的数字,指针 j 指向快变动的数字,我称指针 i 为定时指针,指针 j 为即时指针,或者可以称指针 i 为慢指针,指针 j 为快指针。
2025-03-14 23:44:39
483
原创 Leetcode.718 最长重复子数组
dp[i-1][j-1]是遇到指针 i 和指针 j 相等时需要进行操作的数组,当遇到相等的两个数,需要把两个数组的数字“砍掉”,然后对比之前的最长重复子数组的长度是多少,例如:i=4, [2]:[3,2,1,4,7],[1,2,3,2,1]:[3,2,1,4,7]变成[1,2,3]:[3],发现之前的最长重复子数组就只有1,之后再加上数值等于“2”的长度1,即长度为2是dp[i=4]的值。当遇到相等的时候,需要询问dp[i-1][j-1],为什么不是dp[i-1][j]或者dp[i][j-1]呢?
2025-03-12 19:29:47
222
原创 Leetcode.300 最长递增子序列
因为dp[i]需要进行比较,比如说在i=3时,即3:[0,1,0,3)中,此时3肯定比第一个0大,而0即dp[0]=1,此时dp[i=3]中的数值更新为dp[0]+1,但是这不意味着就是最长的子序列了,我们往后比较,此时3肯定比1大吧,而此时dp[1]=2,我们此时的dp[i=3]需要等于dp[1]+1,但是我们已经填好了dp[i=3]了,如果此时dp[i]+1比我现在的目标大且不进行更新,那我的最终答案就出错了,所以我们需要在每一次的nums[i]>nums[j]中进行比较,更新获得最大值。
2025-03-12 00:33:04
1341
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅