数据结构算法
文章平均质量分 81
FanceFu
希望自己可以努力生活,放下烦恼
展开
-
非递归遍历二叉树
非递归前序遍历1.申请栈,将头节点压入栈2.从栈中弹出顶节点,保存值,若右子树不为空,压入右孩子.若左孩子不为空,压入左孩子3.重复2.直到栈为空public ArrayList<Integer> preOrderUnRecur(TreeNode root) { ArrayList<Integer> res = new ArrayList<>()...原创 2018-02-28 17:30:25 · 270 阅读 · 0 评论 -
层序遍历二叉树
利用队列记录每一层节点个数ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); if (pRoot == null) { ...原创 2018-02-28 19:51:11 · 462 阅读 · 0 评论 -
排序算法总结(精简详细)
// 插入排序:顺序地把待排序的数据按关键字大小插入到已排序的子集合的适当位置// 插入排序对于部分有序数组和小规模数组特别高效void insertSort(int[] A, int n) { for (int i = 1; i < n; i++) { int tmp = A[i]; int j = i; ...原创 2018-02-20 23:58:37 · 315 阅读 · 0 评论 -
算法 第四版学习总结(超赞!!!)
我是技术搬运工,好东西当然要和大家分享啦.原文地址第一章 基础栈数组实现public class ResizeArrayStack<Item> implements Iterable<Item> { private Item[] a = (Item[]) new Object[1]; private int N = 0; public void p...转载 2018-02-23 20:50:29 · 13044 阅读 · 2 评论 -
Leetcode题解(超赞!!!)
我是技术搬运工,好东西当然要和大家分享啦.原文地址算法思想二分查找二分查找思想简单,但是在实现时有一些需要注意的细节:在计算 mid 时不能使用 mid = (l + h) / 2 这种方式,因为 l + h 可能会导致加法溢出,应该使用 mid = l + (h - l) / 2。对 h 的赋值和循环条件有关,当循环条件为 l <= h 时,h = mid - 1;当循环条件为 l <...转载 2018-02-23 21:31:56 · 19619 阅读 · 0 评论 -
剑指 offer 题解(超赞!!!)
我是技术搬运工,好东西当然要和大家分享啦.原文地址第二章 面试需要的基础知识2. 实现 Singleton经典实现以下实现中,私有静态变量被延迟化实例化,这样做的好处是,如果没有用到该类,那么就不会创建该私有静态变量,从而节约资源。这个实现在多线程环境下是不安全的,因为多个线程能够同时进入 if(uniqueInstance == null) 内的语句块,那么就会多次实例化 uniqueInsta...转载 2018-02-23 21:33:59 · 1217 阅读 · 0 评论 -
top K问题的解法
以求最大的第K个数为例共提供3种实现分别为1.排序 时间复杂度 O(nlgn)2.利用最小堆(把最小的都过滤了, 大的都沉底了。) 时间复杂度 O(n * lgk) 可利用java中的优先队列. 底层是二叉堆.3.快速排序中的划分 时间复杂度 O(n) public static int KthLargest(int[] a, int k) { ...原创 2018-03-05 22:09:58 · 408 阅读 · 0 评论