数据结构与算法
文章平均质量分 55
学习为主。
嘻嘻作者哈哈
喜欢折腾技术。寒窗苦读无人晓,一朝成名天下知。
展开
-
链表中环的入口节点或环形链表Ⅱ
题目牛客:链表中环的入口节点Leetcode:环形链表Ⅱ题目分析第一件事,判断是否有环,如果没有就直接返回null;第二件事,找到环的入口;思路使用双指针法判断是否有环,初始时,快慢指针都指向头结点,之后慢指针每次走1步,快指针每次走2步。如果有环,则快慢指针一定会相遇。如上图所示,假设环的入口节点为a,环的长度为b,假设相遇点为m。可得相遇时,慢指针走了m步,快指针走了2m步。快指针先走到m点,之后在环里转了n圈又回到m点,之后两指针相遇。可得快指针走的步数2m = m + nb原创 2022-05-13 20:52:41 · 198 阅读 · 0 评论 -
一般递归时间复杂度分析
使用:master公式计算。当满足T (n) = a * T(n/b) + O(n^d) 时。其中T(n)为样本量的时间复杂度,a为子过程发生多少次,T(n/b)子过程的样本量的时间复杂度,O(n ^b)为除了子过程以外,其他操作所需的时间复杂度。1.log(b,a) < d 时,时间复杂度为O(n^d) 。2.log(b,a) = d 时,时间复杂度为O(n^d * log n)...原创 2019-03-14 16:48:50 · 1298 阅读 · 0 评论 -
检验算法是否正确的一个工具(就是模板,背诵下来):对数器(C++版)
对数器:很多测试算法的案例,通过使用对数器可以检验你的算法是否正确。使用对数器:1.有一个你要测试的方法a:这里以插入排序为例template&amp;amp;amp;lt;typename T&amp;amp;amp;gt; void insertSort(T *arr, int size) { if (size &amp;amp;amp;lt;= 0) { cout &amp;amp;amp;lt;&原创 2019-03-11 21:01:29 · 612 阅读 · 0 评论 -
对数器(C++的vector实现)
使用步骤:1.写出你要测试的算法,这里以从大到小的快速排序为例template<typename T>void quicksort(vector<T>& vec, int start, int end){ T key=vec[end]; //将枢纽值保存,枢纽值一趟排序就放在了最终位置,之前的数据大于他,之后的数据小于他 int i=e...原创 2019-03-21 11:06:01 · 1009 阅读 · 0 评论 -
结构体成员变量指针与普通数据类型指针比较
写这篇文章的原因是,我很好奇链表的结点删除算法为啥修改了指针域的值就可以。还是用代码来说事吧,简单的写一个测试案例:#include<stdio.h>typedef struct{ int* p;}*pstru;void ChangeIntPointerOne(int* p, int *q){ p = q;}void ChangeIntPointerTwo(i...原创 2019-05-19 16:27:44 · 2434 阅读 · 1 评论