摘要: 一文学会回溯算法解题技巧中对回溯法的描述很通俗易懂,现将基本概念迁移到此。 深度优先算法用到了回溯的算法思想,这个算法虽然相对比较简单,但很重要,在生产上广泛用在正则表达式,编译原理的语法分析等地方,很多经典的面试题也可以用回溯算法来解决,如八皇后问题,排列组合问题,0-1背包问题,数独问题等,也是 阅读全文
posted @ 2020-05-12 15:45 水木竹水 阅读(1121) 评论(0) 推荐(0) 编辑
摘要: 问题描述:?代表一个字符;*代表0到多个字符。 问题思路:(回溯) 1.在逐步访问s、p串的过程中,遇到“*”时,记录此时s、p串的索引; 2.令“*”匹配s串的i(i = 0, 1, 2, 3...)个字符,判断两个字符串是否匹配; 3.如果不匹配则回溯至1中记录的两个索引,重复2; 4.直至s串 阅读全文
posted @ 2020-05-12 15:32 水木竹水 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 问题描述:输入整数n,输出第一个比它大的数,数字由给定整数中的数字组成。如1234,输出1243;如1243,输出1324 阶梯思想: 1.从右往左找到第一个逆序,即低数字位比高数字位大,记该高位为i 2.从i右边所有低位中找到比i位大的第一个数 3.后边所有数字增序排列 代码实现: public 阅读全文
posted @ 2020-05-12 15:27 水木竹水 阅读(805) 评论(0) 推荐(0) 编辑
摘要: 1.类型转换问题 public static void main(String args[]) { int num = 2147483647 ; num += 1L;//根据num的类型,先将1L转为int,然后再相加,故结果为-2147483648 //long b = num + 1L; // 阅读全文
posted @ 2020-05-12 15:19 水木竹水 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 在看Collections工具类代码时,发现翻转数组的逻辑,感觉很有趣。思想:折半交换 public static void main(String[] args) { // TODO Auto-generated method stub int[] n = new int[] {1,2,3,4,5 阅读全文
posted @ 2020-05-12 15:14 水木竹水 阅读(284) 评论(0) 推荐(0) 编辑
摘要: Java中的char占用2个字节,即16bit,最小值为Unicode 0,最大值为Unicode 2^16-1. 为什么char占用2个字节呢? (1)Unicode编码把所有语言都统一到一套编码里,以解决英文需要一个字节,中文需要2个字节等跨语言问题。 (2)Unicode通常用两个字节表示一个 阅读全文
posted @ 2020-05-12 15:11 水木竹水 阅读(572) 评论(0) 推荐(0) 编辑
摘要: sleep与wait区别: 1.sleep方法是线程静态方法,wait方法是Object对象方法; 2.sleep使线程休眠,不会释放锁;wait方法是在获取锁情况下进行等待的,等待时会释放锁; 3.都可以响应中断。 public class Test { static Object lock = 阅读全文
posted @ 2020-05-12 15:09 水木竹水 阅读(1592) 评论(0) 推荐(0) 编辑
摘要: LinkedHashMap,底层实现是在HashMap的基础上,添加了双向链表,可以根据访问顺序进行遍历,从最少访问到最频繁访问的升序访问。DOC描述如下: LinkedHashMap(int,float,boolean) create a linked hash map whose order o 阅读全文
posted @ 2020-05-12 15:07 水木竹水 阅读(769) 评论(0) 推荐(0) 编辑
摘要: 使用LinkedHashMap实现LRU 方式一: import java.util.LinkedHashMap; import java.util.Map; public class LRUCache<K,V> extends LinkedHashMap<K,V>{ private final i 阅读全文
posted @ 2020-05-12 14:51 水木竹水 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 最大堆和最小堆特性: (1)都是完全二叉树,最大堆根节点元素大于所有子节点,最小堆根节点元素小于所有子节点; (2)完全二叉树可以使用数组实现,根节点i(数组索引值),左子节点为 2*i+1,右子节点为 2*(i+1);节点i的父节点为 (i-1)>>1;(注意,计算父节点时,最好使用位操作,否则可 阅读全文
posted @ 2020-05-12 14:45 水木竹水 阅读(1188) 评论(0) 推荐(0) 编辑
摘要: 在此列举常用简单的排序算法,冒泡、插入、归并和快排,后边有机会再添加其他排序方法。 冒泡排序 思想:每次交换相邻元素,时间复杂度为O(N^2) private static void bubbleSort(int[] n) { //相邻元素交换位置,时间复杂度为O(N^2) for(int i = 阅读全文
posted @ 2020-05-12 14:36 水木竹水 阅读(213) 评论(0) 推荐(0) 编辑