随笔分类 -  数据结构和算法

摘要:简单位运算介绍 或 | 只要有一个为1,结果就为1。 与 & 两位全为1,结果才为1 与的特殊用法:取一个数中特定位。 方法:找一个数,对应x要取的位,该数的对应位为1,其余位为零,此数与X对应位与即可(一个数和一个数的相反数做与操作得到的是这个数从右往左第一个不为0的数。) 例如:设X=1010 阅读全文
posted @ 2021-11-02 01:09 palapala 阅读(56) 评论(0) 推荐(0) 编辑
摘要:以下的讨论实现都是奔着O(1)时间复杂度 LRU LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 LRU 总体上是这样的,最近使用的放在前边(最左边),最近没用的放到后边(最右 阅读全文
posted @ 2021-07-13 17:55 palapala 阅读(4989) 评论(0) 推荐(1) 编辑
摘要:1)归并排序思想 1)将数组分成两半 2)对左边排序 3)对右边排序 4)两边都排好顺了 对左右两边进行merge 代码步骤1)两个半截数组已经排好序的情况下,把他们合并到一起 第一次比较 1比3小 把1放到下面,i++ 第二次比较 4比3大 把3放到下面,j++ int mid=arr.lengt 阅读全文
posted @ 2020-04-23 15:59 palapala 阅读(138) 评论(0) 推荐(0) 编辑
摘要:堆 堆和优先队列 Heap and Priority Queue 普通队列:先进先出,后进后出 优先队列:出队顺序和入队顺序无关;和优先级相关 使用数组实现优先队列时间复杂度:O(n^2),使用堆的时间复杂度:O(nlgn) 最大堆是一颗完全的二叉树,并且任何一个节点都不大于它的父亲节点 所以我们可 阅读全文
posted @ 2020-02-11 22:47 palapala 阅读(163) 评论(0) 推荐(0) 编辑
摘要:平衡二叉树和二叉查找树 至多有两个子节点的树成为二叉树 1)平衡二叉树 1)树的左右高度差不能超过1. 2)任何往下递归的左子树和右子树,必须符合第一条性质 3)没有任何节点的空树或只有跟节点的树也是平衡二叉树 树的节点Node是key value的形式。因为key可能不连续,甚至不是整数,所以我们 阅读全文
posted @ 2020-02-07 20:48 palapala 阅读(550) 评论(0) 推荐(0) 编辑
摘要:写算法提的时候 一定要图形结合,知道是怎么个原理,不能一味的看代码 另外不要求一步写到位,边界值的问题可以慢慢调试 排序菜鸟教程 选择排序 选择排序是最简单但是也是最没用的算法 时间复杂度O(n^2)而且不稳定 思路:每次都从剩下的数组找到最小的值放到前面来 public static void s 阅读全文
posted @ 2019-05-16 19:49 palapala 阅读(231) 评论(0) 推荐(0) 编辑
摘要:首先介绍D&C递归 快速排序的思想是:分而治之(divide and conquer,D&C)一种递归式问题解决思路 这里先介绍D&C的工作原理 1)找出简单的基线条件 2)确定如何缩小问题的规模,使其符合基线条件。 看一个例子。 给定一个数组 {2 4 6},把这些数组相加返回一个结果,使用循环很 阅读全文
posted @ 2019-02-28 23:20 palapala 阅读(487) 评论(0) 推荐(0) 编辑
摘要:栈:先进后出(底层用数组实现) 栈只有一个开口,先进去的就到最底下,后进来的就在前面,要是拿出去的话,肯定是从开口端拿出去, 所以说先进后出,后进先出。 数据结构: java实现栈(基于数组): /** * 栈只有一个开口,先进去的就到最底下,后进来的就在前面,要是拿出去的话,肯定是从开口端拿出去, 阅读全文
posted @ 2018-08-26 01:08 palapala 阅读(3576) 评论(1) 推荐(0) 编辑