随笔分类 - 数据结构
摘要:思路:两个指针,也是快指针和慢指针,先让快指针走k -1步,这时慢指针开始和快指针一起走到尾部。慢指针停止的点就是倒数第k个节点。
阅读全文
摘要:思路:快慢指针实现 用两个指针,一个指针一次走一步,另一个指针一次走两步,如果存在环,则这两个指针会在环内相遇,时间复杂度为O(n) 拓展1:如果单链表有环,找出环的入口节点(环的连接点) 拓展二:求链表中环的长度
阅读全文
摘要:/** * 单链表反转 */ public static ListNode reverse(ListNode head){ ListNode pre = null; //当前节点的前一个节点 ListNode next = null;//当前节点的下一个节点 while(head != null...
阅读全文
摘要:public class ListNode { public int value; public ListNode next; public ListNode(int value) { this.value = value; } } /** * 头结点插入 */ public static void hea...
阅读全文
摘要:一、理解指针或引用的含义1.含义:将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值给指针(引用)。2.示例:p—>next = q; 表示p节点的后继指针存储了q节点的内存地址。p—>next = p—>next—>next; 表示p节点的后继指针存储了p节点的下下个
阅读全文
摘要:二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。 时间复杂度:O(logn) 一、二分查找容易出错的3个地方: 1、循环退出条件 注意是low <= high. 2、mid的取值
阅读全文
摘要:0-1背包问题 有N个物品,分布具有价值Vi,重量Gi,i= 0,1,2,3....N-1 现在我们的背包最多能承重M,则最多能装多少价值的物品? 贪心策略,每次选择能装的物品中: (1)、价值最大的 (2)、重量最小的 (3)、单位重量价值最大的 贪心算法的特点与作用: 1、设计简单,计算简便 2
阅读全文
摘要:1、字符串匹配问题:给定一个字符串,求子串在该字符串中的位置索引 暴力求解:穷举所有位置s=0,s=1....s=n-m,判断长度m的串是否每一位与目标串相同,时间复杂度:O((n-m=1)*m). 优化思路: 打印结果: 比较优化的位移:4比较优化的位移:4比较优化的位移:5查找到的子串:0查找到
阅读全文
摘要:public class ListNode { public int value; public ListNode next; public ListNode(int value) { this.value = value; } } public class Mylist { /** * 头结点插入 */...
阅读全文
摘要:二叉树的定义:二叉树是每个结点最多有两个子树的树结构。子树被称为“左子树” 和 “右子树”。 二叉树常被用于实现二叉查找树和二叉堆。 基本概念:二叉树是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:1、空二叉树 2、只有一个根节点的二叉树 3、只有左子树 4、只有右子树 5、完全二叉
阅读全文
摘要:二分查找算法主要是解决在“一堆数中找出指定的数”这类问题。 而想要应用二分查找法,这“一堆数”必须有一下特征: 存储在数组中 有序排列 二分查找法的基本实现 二分查找法在算法家族大类中属于“分治法”,分治法基本都可以用递归来实现的,二分查找法的递归实现如下: 迭代实现如下: 二分查找法的O(log
阅读全文

浙公网安备 33010602011771号