- 博客(8)
- 收藏
- 关注
原创 算法LeetCode Day8--KMP算法
KMP算法就是在一个串中找另一个串。KMP中最重要的是next数组,它记录了最长相等前后缀。就是前缀表。意味着在某个字符失配时,前缀表会告诉你下一步匹配中,模式串应该跳到哪个位置。找到的不匹配的位置, 那么此时我们要看它的前一个字符的前缀表的数值是多少。为什么要前一个字符的前缀表的数值呢,因为要找前面字符串的最长相同的前缀和后缀。所以要看前一位的 前缀表的数值。前一个字符的前缀表的数值是2, 所以把下标移动到下标2的位置继续比配。next数组中:i:后缀j:前缀一般一开始把。
2024-07-26 11:11:57
349
原创 算法LeetCode--Day7 字符串
我一开始想得好复杂,还设了三个指针,后面就导致思路越来越乱了,这里只在pos = (2*k)的地方看就好了,然后每次移动2k位置,可以借用系统库的reserve函数,也可以自己写一个。这个主要是要原地修改数组吧,其实一开始没想到,但是看到说可以用两个指针以后就突然茅塞顿开了,想到了还是挺简单的。问题是 Java里的string不可以修改,如果使用java就一定要用辅助空间,其他的可以不用。解题思路是这样的,先对数组进行扩容,再从后往前依次移动到后面去。我一开始也想的就是用split函数,但是说这样太水了。
2024-07-18 09:43:09
325
原创 算法LeetCode Day6-哈希表2
本来以为会有特别牛的方法,常规的思路还是挺好想的,就是前两个相加放在哈希表里,记录value用来算出现的次数,再将后两个相加,找到value次数对count进行累加。
2024-07-17 15:09:11
384
原创 算法LeetCode Day5 --哈希表
std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树,红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。
2024-07-11 11:22:33
988
原创 LeetCode Day4--链表(递归、快慢指针)
当然,n也可以不取1,就表示index2从起始点到入口处的过程中,index1从相遇点开始走,走了n-1圈后,再走距离z,就可以在入口处与index2相遇(注意:index1和index2速度相同,都为1步)。在相遇时,慢指针slow走了x+y步,快指针fast走了x+n(y+z)+y步(n为快慢指针相遇前快指针在环内走了n圈,n>=1),以上为路程,而它们的速度分别为1和2,由于二者走了相同时间,不过,我在自己做的时候没有用虚拟头结点,然后它就一直显示超时,我也不知道是什么原因。的话,应该挺容易的。
2024-07-10 12:18:55
527
原创 算法LeetCode Day3-链表
一般是在直接操作链表时,原来的头结点与其他结点在处理方式上有不同,所以引入虚拟头结点,可以使他们一起执行相同的操作。一般就是用dummyHead来表示引入的虚拟头结点,return 头结点的时候,别忘了。这里面就用到了虚拟头结点,另外还有一些具体链表的操作。代码如下:(这是没有使用虚拟头结点的方法,也能做)链表的题目一般就是要知道的就是,另外还在有些题目中会要用到。, 这才是新的头结点。
2024-07-09 13:25:39
360
原创 算法Leetcode Day2--滑动窗口
这里有个关键点:当你的window[d]的值已经减为0时,说明此时窗口中已经没有d这个数存在,所以一定要将该点。就是套用模板,然后根据每道题的不同要求改写:窗口内的数据更新情况;以及最后的返回值情况。掉(删除功能),不然在while循环判断window.size()时会出错。以及窗口收缩,这里用vaild和need.size()比较,是很聪明的。所以困难点,一般在于数据要怎么更新!这是他给的滑动窗口题目的。
2024-07-08 21:09:15
285
原创 算法Leetcode Day1-数组
双指针 (left right)mid = left + (left -right) / 2 ----这是为了防止直接left right相加时发生溢出。根据比较 target 和 nums[mid]的大小,不断更换 left 或者 right 指针的位置。因为存在left = right = mid 此时的指向target的情况,所以并不能排除。right = mid ,然后提交显示超出时间限制。要记住数组不能直接删除,只能覆盖!使用二分查找 一般是看到题目中有写。题目里没说有序数组。
2024-07-04 12:37:32
209
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅