数据结构与算法
Crazypokerk_
这个作者很懒,什么都没留下…
展开
-
由两个栈组成的队列
题目:编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)。思路:1.新建俩个普通栈,一个栈仅仅压入元素,记为 stackPush ,一个栈仅仅弹出元素,记为 stackPop 。2.当一组元素输入时,将该组数据依次压入stackPush 中,再从压入栈全部取出,依次压入stackPop 中。3.最后,从stackPop 中依次弹出,就符合了...原创 2019-06-04 21:51:23 · 416 阅读 · 0 评论 -
手动创建栈实现——树的深度优先搜索
这里学到了使用自建栈的深度优先搜索算法,而不是递归调用使用DFS。public class StackDFS { //使用栈来实现深度优先搜索 public void dfsByStack(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); stack.push(root); /...原创 2019-05-06 19:21:51 · 789 阅读 · 0 评论 -
算法技巧:异或性质
位运算的性质与应用异或运算 ^有人叫半加、数学系的叫按位模2加。下文用得到的一些简单的性质: x^0 = x且x^x = 0 交换律:x^y = y^x 结合律:(x^y)^z = x^(y^z) 自反性:x^y^y = x 下面是几个小题目,可以用异或解决,很有技巧性。交换两个数abint a;int b;a = a ^...原创 2019-04-17 21:48:15 · 1135 阅读 · 0 评论 -
排序算法
目录什么是排序?算法实现:冒泡排序插入排序选择排序堆排序归并排序快速排序计数排序希尔排序什么是排序?算法 最好情况时间复杂度 最坏情况时间复杂度 平均时间复杂度 原地 稳定 空间复杂度 冒泡排序 O(N) O(N²) O(N²) YES YES O(1) 插入排序...原创 2019-02-15 10:40:21 · 136 阅读 · 0 评论 -
实现一个LRU缓存
什么是LRU算法?就是一种缓存淘汰策略。LRU 算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。LRU 算法实际上是让你设计数据结构:首先要接收一个 capacity 参数作为缓存的最大容量,然后实现两个 API,一个是 put(key, val) 方法存入键值对,另一...转载 2019-08-29 17:41:59 · 706 阅读 · 1 评论 -
树的遍历总结
引今天在leetcode上刷完了常见的树的遍历的题,就来总结下规律。二叉树层次遍历该题目对应于 leetcode:102 二叉树的层次遍历https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/思路:既然是层次遍历,就选择使用BFS广度优先搜索来解决,BFS的核...原创 2019-08-31 21:37:28 · 309 阅读 · 0 评论 -
链表算法总结
通过做以上的Leetcode练习题目,得出以下比较通用的解题方法:快慢指针求链表中点ListNode slow = head;ListNode fast = head; while (fast.next != null && fast.next != null) { slow = slow.next; fast = fast.next.next;}/...原创 2019-09-02 17:01:54 · 386 阅读 · 0 评论