随笔分类 - 算法
摘要:/** * 采用动态规划找出数组的最长的递增子序列 */ public class LongestSub { /** * * 从上面的分析中找到规律,即dp[i]的值是前面所有小于arr[i]的数组的dp[i]的最大值+1; */ public static void main(String[] a
阅读全文
摘要:/** * //采用位图求一个数组的子集 * //采用位图求一个字符串的所有子序列 */ public class Test3 { public static void main(String[] args) { // allSub(); allSub("abc"); } private stati
阅读全文
摘要:主要的实现逻辑是两层for循环,然后套用公式就可以得出结果 //0/1背包问题 public class Test { //B(k,w)表示的是当背包容量是w时,可以装前k件商品的最大价格 /** | B(k-1,w) 表示k太重了 * B(k,w) = | * | -- max { B(k-1,w
阅读全文
摘要:第一步:全部马分8组,各跑一次,然后淘汰掉每组的后四名(8次); 第二步:取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马(1次): 第三步: 其实这时候红色区域的马也可以淘汰了,红色区域的马不可能进入前4名。A1可以直接晋级,因为他是跑的最快的 在以上的两次比赛过后可以得出,A1 直接晋级
阅读全文
摘要:/** * 字符串只包含0和1,将字符串翻转到单调递增 */ public class Test { /** * 两种方法计算的值是一致的 * @param args */ public static void main(String[] args) { String str = "00000011
阅读全文
摘要:二叉树按层遍历 public class WideFirstSearch { public static void main(String[] args) { Node root = new Node("A"); root.left = new Node("B"); root.right = new
阅读全文
摘要:/** * 深度遍历的一个简单例子 * */ public class EmployeeImportance { private static int res = 0; private static Employee employee; public static void main(String[
阅读全文
摘要:/** * 一个数组,一半奇数,一半是偶数,要将数组按照偶奇偶奇的顺序排序 * 思路,找出下标是偶数但值是奇数的,和下标是奇数但值是偶数的,两个互换,直到结束 */ public class SortArrayByParityll { public static void main(String[]
阅读全文
摘要:/** * 使用两个指针i和j,初始化均为0。然后j往后遍历,若遇到了奇数,则将 A[j] 和 A[i] 交换位置,同时i自增1,这样操作下来,同样可以将所有的偶数都放在奇数前面 * */ public class SortArrayByParity { public static void mai
阅读全文
摘要:动态规划 /** * 硬币找零, 假如你的硬币面值有1,2,5等,每种面值的都有无数个,求找零100最少要多少个硬币 * */ public class CoinChange { public static void main(String[] args) { int [] coins = new
阅读全文
摘要:/** * 完全二叉树:要么是满二叉树,要么是在满二叉树的基础上,最后一层的节点是从左到右是依次添加的 * 采用按层遍历的方式判断是不是完全二叉树 */ public class IsCompleteTree { public static void main(String[] args) { Node head = new Node(1); head.left = new Node(2); he
阅读全文
摘要:/** *二叉搜索树 *任何节点的左 子树不为null,则左子树上的所有的节点都比根节点小,右子树不为null,则右子树上的所有的节点都比根节点大 *判断二叉搜索树的方法是:将树按照中序遍历后,是不是逐渐递增的 * */ public class SearchTree { public static void main(String[] args) { Node root = new Node(4
阅读全文
摘要://判断一个树是不是平衡二叉树 //任何节点的左子树和右子树高度差不超过1 public class BalanceTree { public static void main(String[] args) { Node root = new Node(1); root.left = new Node(2); root.right = new Node(3); root.left.left = n
阅读全文
摘要:public class BinaryTreeSerialize { public static void main(String[] args) { Node root = new Node(1); root.left = new Node(2); root.right = new Node(3); root.left.left = new Node(4); root.left.right =
阅读全文
摘要:现在有一种特殊的二叉树节点类型,每个节点有个父引用指向他的父节点,根节点的父引用指向null,找出指定节点的后继节点,后继节点是整个树按照中序遍历时候的下一个节点,整个树的最右节点的后继节点为null,要求最快获取后继节点,不能采用遍历整个树的方式
阅读全文
摘要:public class BinaryTreeNonRecursion { public static void main(String[] args) { Node root = new Node(1); root.left = new Node(2); root.right = new Node(3); root.left.left = new Node(4); root.left.right
阅读全文
摘要:public class BinaryTree { public static void main(String[] args) { Node root = new Node(1); root.left = new Node(2); root.right = new Node(3); root.left.left = new Node(4); root.left.right = new Node(
阅读全文
摘要:分为三种情况:第一种情况: 一个链表有环,一个链表没有环,那这两个链表不可能相交第二种情况: 两个链表都没有环第三种情况: 两个链表都有环 两个有环单向链表相交示例图 两个无环单向链表相交示例图
阅读全文
摘要:第一种方法:准备三个队列,遍历链表时候,将小于的放入小于队列中,等于的放入等于队列中,大于的放入大于队列中,然后从队列中取出来重新连接 第二种方法:遍历链表,组成三个链表,重新连接 (只用到了有限的几个变量,额外空间复杂度是O(1))
阅读全文

浙公网安备 33010602011771号