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

java反转链表
摘要:/** * 遍历,将当前节点的下一个节点缓存后更改当前节点指针 */ public static Node reverse2(Node head) { if (head == null) return head; Node pre = head;// 上一结点 Node cur = head.get 阅读全文
posted @ 2017-10-10 11:07 blythe 阅读(232) 评论(0) 推荐(0)
之字形打印二叉树
摘要:public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> ans = new ArrayList<>(); if (root == null) return ans; // 使用两个栈维护顺序 S 阅读全文
posted @ 2017-09-17 16:12 blythe 阅读(151) 评论(0) 推荐(0)
堆排序过程
摘要:原文链接:http://blog.csdn.net/sxhelijian/article/details/50295637 例:对{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7}进行堆排序的过程。 算法如下: (1)循环建立初始堆 用给出的序列构造堆的初始状 阅读全文
posted @ 2017-09-14 11:44 blythe 阅读(737) 评论(0) 推荐(0)
二叉树的非递归遍历
摘要:// 先序遍历非递归 public static void preOrder2(BinTree t) { Stack s = new Stack(); while (t != null || !s.empty()) { while (t != null) { ... 阅读全文
posted @ 2017-09-06 18:25 blythe 阅读(169) 评论(0) 推荐(0)
排序算法的稳定性
摘要:稳定的排序算法:归并,插入排序 不稳定的排序算法:选择排序 (5,7,5,3)3和5交换之后,两个5的相对顺序发 生了变化) shell排序 (1, 5, 5, 2,3, 7) 间隔序列为(3, 1), 3的时候 (1,5,7)(5,2,3)), 在间隔>1的时候会出现不 稳定 快速排序 (3, 5 阅读全文
posted @ 2017-08-30 18:50 blythe 阅读(132) 评论(0) 推荐(0)
哈夫曼树
摘要:参考:http://www.cnblogs.com/wuyuankun/p/3982216.html http://www.cnblogs.com/yaowen/p/4268157.html 哈夫曼树又称最优二叉树, 是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点 的权值 阅读全文
posted @ 2017-08-30 15:36 blythe 阅读(1577) 评论(0) 推荐(0)
二叉树的LCA(最近公共祖先)算法
摘要:1.如果是二叉搜索树 2.如果是普通树 阅读全文
posted @ 2017-08-25 11:15 blythe 阅读(268) 评论(0) 推荐(0)
二叉树的计算
摘要:1.先复习一下等差数列和等比数列求和公式 2.满二叉树与完全二叉树 满二叉树(Full Binary Tree): 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(最后一层上的无子结点的结点为叶子结点)。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值。所有叶子结点 阅读全文
posted @ 2017-08-25 09:26 blythe 阅读(710) 评论(0) 推荐(0)
单调栈与单调队列
摘要:单调栈与单调队列很相似,单调性指的是严格的递增或者递减。 单调栈有以下两个性质: 1、若是单调递增栈,则从栈顶到栈底的元素是严格递增的。若是单调递减栈,则从栈顶到栈底的元素是严格递减的。 2、越靠近栈顶的元素越后进栈。 单调栈与单调队列不同的地方在于栈只能在栈顶操作,因此一般在应用单调栈的地方不限定 阅读全文
posted @ 2017-08-24 09:27 blythe 阅读(148) 评论(0) 推荐(0)
随机打乱数组
摘要:主要用到了java.util包下的Collections.shuffle方法 阅读全文
posted @ 2017-08-18 08:27 blythe 阅读(100) 评论(0) 推荐(0)
二叉树的构建
摘要:要构建二叉树及对二叉树进行操作首先得构建节点,节点包括节点的值还有它的左右孩子 对二叉树的操作有构建,遍历(递归,非递归,层次遍历)。栈的特点是先进先出,用栈能保留二叉树的访问路径,所以二叉树的非递归遍历应该用栈来操作,队列是先进后出,用来层次打印二叉树。 阅读全文
posted @ 2017-08-17 09:26 blythe 阅读(427) 评论(0) 推荐(0)
计算1+11+111+1111+........
摘要:f(n)=f(n-1)+10^n; public static void main(String[] args) { int n=2017; long temp=1; for(int i=1;i<n;i++){ temp+=func(i); } System.out.println(temp); } 阅读全文
posted @ 2017-08-16 19:18 blythe 阅读(472) 评论(0) 推荐(0)
Jav实现F(n)=F(n-1)+F(n-2)+.....+F(1)+1
摘要:private static int func(int count) { // TODO Auto-generated method stub int cou = 0; if(count==1){ cou=1; } else if(count==2){ cou=2; } else{ for(int 阅读全文
posted @ 2017-08-16 14:09 blythe 阅读(328) 评论(0) 推荐(0)
查找二维数组中是否有符合的目标值
摘要:/** * 在一个二维数组中,每一行都按照从左到右递增的顺序排序, * 每一列都按照从上到下递增的顺序排序。请完成一个函数, * 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 * * 思路 : * 从左下角最后一个元素开始比较,如果target小于这个元素向上遍历否则向右遍历 */ 阅读全文
posted @ 2017-08-16 11:01 blythe 阅读(249) 评论(0) 推荐(0)
排序算法
摘要:/** * 冒泡排序 */ public static void Bubble(int[] array){ for(int i=0;i<array.length-1;i++){ for(int j=0;j<array.length-1-i;j++){ if(array[j]>array[j+1]){ 阅读全文
posted @ 2017-08-16 09:36 blythe 阅读(110) 评论(0) 推荐(0)
时间复杂度
摘要:时间复杂度与空间复杂度是衡量算法是否优秀的标准 一般时间复杂度有O(1),O(n),O(n2),O(logN) O(logN)举例: for(int i=1;i<n;i++){ i=i*2; } 在这段程序里,假设要执行x次,则2x 应该小于n,最后小于logN,所以它的时间复杂度为O(logN) 阅读全文
posted @ 2017-08-15 21:11 blythe 阅读(111) 评论(0) 推荐(0)
查找一个字符串中重复出现字符的个数
摘要:import java.util.HashMap;import java.util.Map;import java.util.Scanner; /** * 查找一个字符串中重复出现字符的个数 * 首先声明一个map,从第一个字符开始遍历,如果map中已经有了这个字符则把值加1,否则重新 * 创建一个 阅读全文
posted @ 2017-08-15 11:37 blythe 阅读(1319) 评论(0) 推荐(0)