随笔分类 -  算法

摘要:/** * 采用动态规划找出数组的最长的递增子序列 */ public class LongestSub { /** * * 从上面的分析中找到规律,即dp[i]的值是前面所有小于arr[i]的数组的dp[i]的最大值+1; */ public static void main(String[] a 阅读全文
posted @ 2020-05-31 02:44 踏月而来 阅读(492) 评论(0) 推荐(0)
摘要:/** * //采用位图求一个数组的子集 * //采用位图求一个字符串的所有子序列 */ public class Test3 { public static void main(String[] args) { // allSub(); allSub("abc"); } private stati 阅读全文
posted @ 2020-05-30 19:00 踏月而来 阅读(349) 评论(0) 推荐(0)
摘要:主要的实现逻辑是两层for循环,然后套用公式就可以得出结果 //0/1背包问题 public class Test { //B(k,w)表示的是当背包容量是w时,可以装前k件商品的最大价格 /** | B(k-1,w) 表示k太重了 * B(k,w) = | * | -- max { B(k-1,w 阅读全文
posted @ 2020-05-29 01:46 踏月而来 阅读(271) 评论(0) 推荐(0)
摘要:第一步:全部马分8组,各跑一次,然后淘汰掉每组的后四名(8次); 第二步:取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马(1次): 第三步: 其实这时候红色区域的马也可以淘汰了,红色区域的马不可能进入前4名。A1可以直接晋级,因为他是跑的最快的 在以上的两次比赛过后可以得出,A1 直接晋级 阅读全文
posted @ 2020-01-02 16:53 踏月而来 阅读(888) 评论(0) 推荐(0)
摘要:/** * 字符串只包含0和1,将字符串翻转到单调递增 */ public class Test { /** * 两种方法计算的值是一致的 * @param args */ public static void main(String[] args) { String str = "00000011 阅读全文
posted @ 2019-12-17 15:44 踏月而来 阅读(334) 评论(0) 推荐(0)
摘要:二叉树按层遍历 public class WideFirstSearch { public static void main(String[] args) { Node root = new Node("A"); root.left = new Node("B"); root.right = new 阅读全文
posted @ 2019-11-07 11:32 踏月而来 阅读(304) 评论(0) 推荐(0)
摘要:/** * 深度遍历的一个简单例子 * */ public class EmployeeImportance { private static int res = 0; private static Employee employee; public static void main(String[ 阅读全文
posted @ 2019-11-07 10:59 踏月而来 阅读(166) 评论(0) 推荐(0)
摘要:/** * 一个数组,一半奇数,一半是偶数,要将数组按照偶奇偶奇的顺序排序 * 思路,找出下标是偶数但值是奇数的,和下标是奇数但值是偶数的,两个互换,直到结束 */ public class SortArrayByParityll { public static void main(String[] 阅读全文
posted @ 2019-11-06 15:48 踏月而来 阅读(1124) 评论(0) 推荐(0)
摘要:/** * 使用两个指针i和j,初始化均为0。然后j往后遍历,若遇到了奇数,则将 A[j] 和 A[i] 交换位置,同时i自增1,这样操作下来,同样可以将所有的偶数都放在奇数前面 * */ public class SortArrayByParity { public static void mai 阅读全文
posted @ 2019-11-06 14:47 踏月而来 阅读(1298) 评论(0) 推荐(0)
摘要:动态规划 /** * 硬币找零, 假如你的硬币面值有1,2,5等,每种面值的都有无数个,求找零100最少要多少个硬币 * */ public class CoinChange { public static void main(String[] args) { int [] coins = new 阅读全文
posted @ 2019-11-06 12:10 踏月而来 阅读(163) 评论(0) 推荐(0)
摘要:/** * 完全二叉树:要么是满二叉树,要么是在满二叉树的基础上,最后一层的节点是从左到右是依次添加的 * 采用按层遍历的方式判断是不是完全二叉树 */ public class IsCompleteTree { public static void main(String[] args) { Node head = new Node(1); head.left = new Node(2); he 阅读全文
posted @ 2019-10-15 21:34 踏月而来 阅读(405) 评论(0) 推荐(0)
摘要:/** *二叉搜索树 *任何节点的左 子树不为null,则左子树上的所有的节点都比根节点小,右子树不为null,则右子树上的所有的节点都比根节点大 *判断二叉搜索树的方法是:将树按照中序遍历后,是不是逐渐递增的 * */ public class SearchTree { public static void main(String[] args) { Node root = new Node(4 阅读全文
posted @ 2019-10-14 10:52 踏月而来 阅读(354) 评论(0) 推荐(0)
摘要://判断一个树是不是平衡二叉树 //任何节点的左子树和右子树高度差不超过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 阅读全文
posted @ 2019-10-14 10:50 踏月而来 阅读(153) 评论(0) 推荐(0)
摘要: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 = 阅读全文
posted @ 2019-10-12 12:18 踏月而来 阅读(153) 评论(0) 推荐(0)
摘要:现在有一种特殊的二叉树节点类型,每个节点有个父引用指向他的父节点,根节点的父引用指向null,找出指定节点的后继节点,后继节点是整个树按照中序遍历时候的下一个节点,整个树的最右节点的后继节点为null,要求最快获取后继节点,不能采用遍历整个树的方式 阅读全文
posted @ 2019-10-11 11:05 踏月而来 阅读(847) 评论(0) 推荐(0)
摘要: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 阅读全文
posted @ 2019-10-11 09:57 踏月而来 阅读(316) 评论(0) 推荐(0)
摘要: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( 阅读全文
posted @ 2019-10-10 16:18 踏月而来 阅读(156) 评论(0) 推荐(0)
摘要:分为三种情况:第一种情况: 一个链表有环,一个链表没有环,那这两个链表不可能相交第二种情况: 两个链表都没有环第三种情况: 两个链表都有环 两个有环单向链表相交示例图 两个无环单向链表相交示例图 阅读全文
posted @ 2019-10-10 14:55 踏月而来 阅读(567) 评论(0) 推荐(0)
摘要:思路:利用map存储节点之间的对应关系 阅读全文
posted @ 2019-10-10 11:27 踏月而来 阅读(165) 评论(0) 推荐(0)
摘要:第一种方法:准备三个队列,遍历链表时候,将小于的放入小于队列中,等于的放入等于队列中,大于的放入大于队列中,然后从队列中取出来重新连接 第二种方法:遍历链表,组成三个链表,重新连接 (只用到了有限的几个变量,额外空间复杂度是O(1)) 阅读全文
posted @ 2019-10-09 20:18 踏月而来 阅读(331) 评论(0) 推荐(0)