![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法模板
weixin_43774168
这个作者很懒,什么都没留下…
展开
-
单调队列 好文章
传送门转载 2021-08-28 11:22:43 · 62 阅读 · 0 评论 -
算法模板 栈与队列
用栈实现队列https://leetcode-cn.com/problems/implement-queue-using-stacks/思路:用一个输入栈,接收所有进入队列的数据;用一个输出栈,用于出队所有队头的位置。push操作:入队元素进入输入栈pop操作:若输出栈为空,则把输出栈所有元素倒入输出栈(这其实是先进后出变为先进先出的过程),把输出栈栈顶的元素弹出,并返回该元素。(若题目没有说明,还需要加入队列为空时的pop操作处理)peek操作:其实就是队列的pop操作,再把弹出的元素放回队列原创 2021-08-26 10:03:15 · 76 阅读 · 0 评论 -
算法模板 哈希表
哈希表一般都是用来快速判断一个元素是否出现集合里,查找操作时间复杂度为O(1)哈希碰撞:两个不同的原始值在经过哈希函数运算后得到同样的结果,对应到哈希表同一个位置解决哈希碰撞的方法:1.开放地址法当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。2.拉链法将所有关键字为同义词的记录存储在同一线性链表...原创 2021-08-22 23:46:50 · 80 阅读 · 0 评论 -
KMP算法
KMP算法前缀:不包含最后一个字符的所有以第一个字符开头的连续子串后缀:不包含第一个字符的所有以最后一个字符结尾的连续子串模式串与前缀表对应位置的数字表示的就是:下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀。KMP算法原理:到模式串不匹配的下标时,看前一个下标在前缀表的值(=前面字符串相同的前缀与后缀的长度),把模式串的下标移到这个值对应的下标上。求next数组代码:void getNext(vector<int>& next,string& need原创 2021-08-21 19:41:05 · 66 阅读 · 0 评论 -
KMP算法 分析回退操作j=next[j-1]
传送门转载 2021-08-21 13:24:59 · 628 阅读 · 0 评论 -
算法模板 字符串
反转字符串https://leetcode-cn.com/problems/reverse-string/class Solution {public: void swap(char& a,char& b) { char temp=a; a=b; b=temp; } void reverseString(vector<char>& s) { if(s.size()原创 2021-08-20 17:36:33 · 55 阅读 · 0 评论 -
算法 链表 判断链表是否有环并且找到环的入口
https://leetcode-cn.com/problems/linked-list-cycle-ii/判断链表是否有环可以使用快慢指针法, 分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。若链表没有环,那么fast指针一定会提前到尾端NULL处。如果有环,如何找到这个环的入口从相遇结点出发一个指针index1,从头结点也出发一个指针index2,这两个指针每次只走原创 2021-08-19 23:45:50 · 104 阅读 · 0 评论 -
算法模板 链表
移除链表元素https://leetcode-cn.com/problems/remove-linked-list-elements/submissions/class Solution {public: ListNode* removeElements(ListNode* head, int val) { //删除==val的头结点 while(head!=NULL&&head->val==val) {原创 2021-08-18 21:29:14 · 46 阅读 · 0 评论 -
算法模板 数组 螺旋矩阵
螺旋矩阵https://leetcode-cn.com/problems/spiral-matrix-ii/class Solution {public: bool out(int x,int y,int n) { if(x>=0&&x<=n-1&&y>=0&&y<=n-1) { return false; } else原创 2021-08-18 15:17:11 · 61 阅读 · 0 评论 -
算法模板 双指针法
双指针法:用两个指针一个循环来完成(有时候两个循环才能完成的)一件事情反转链表https://leetcode-cn.com/problems/reverse-linked-list/submissions/class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* pre=NULL,*cur=head; while(cur!=NULL) {原创 2021-08-15 21:10:53 · 141 阅读 · 0 评论 -
算法模板 二分查找
二分查找前提:1.给定数组中元素有序 2.数组中没有重复元素,不然返回的结果可能不唯一闭区间[left,right]内查找int binary_search(int* a,int left,int right,int target){ int middle; while(left<=right) { middle=(left+right)/2; if(a[middle]<target) left=middle+1; else if(a[middle]>target)原创 2021-08-15 10:22:23 · 54 阅读 · 0 评论