随笔分类 - 数据结构与算法
摘要:一文学会回溯算法解题技巧中对回溯法的描述很通俗易懂,现将基本概念迁移到此。 深度优先算法用到了回溯的算法思想,这个算法虽然相对比较简单,但很重要,在生产上广泛用在正则表达式,编译原理的语法分析等地方,很多经典的面试题也可以用回溯算法来解决,如八皇后问题,排列组合问题,0-1背包问题,数独问题等,也是
阅读全文
摘要:问题描述:?代表一个字符;*代表0到多个字符。 问题思路:(回溯) 1.在逐步访问s、p串的过程中,遇到“*”时,记录此时s、p串的索引; 2.令“*”匹配s串的i(i = 0, 1, 2, 3...)个字符,判断两个字符串是否匹配; 3.如果不匹配则回溯至1中记录的两个索引,重复2; 4.直至s串
阅读全文
摘要:问题描述:输入整数n,输出第一个比它大的数,数字由给定整数中的数字组成。如1234,输出1243;如1243,输出1324 阶梯思想: 1.从右往左找到第一个逆序,即低数字位比高数字位大,记该高位为i 2.从i右边所有低位中找到比i位大的第一个数 3.后边所有数字增序排列 代码实现: public
阅读全文
摘要:在看Collections工具类代码时,发现翻转数组的逻辑,感觉很有趣。思想:折半交换 public static void main(String[] args) { // TODO Auto-generated method stub int[] n = new int[] {1,2,3,4,5
阅读全文
摘要:使用LinkedHashMap实现LRU 方式一: import java.util.LinkedHashMap; import java.util.Map; public class LRUCache<K,V> extends LinkedHashMap<K,V>{ private final i
阅读全文
摘要:最大堆和最小堆特性: (1)都是完全二叉树,最大堆根节点元素大于所有子节点,最小堆根节点元素小于所有子节点; (2)完全二叉树可以使用数组实现,根节点i(数组索引值),左子节点为 2*i+1,右子节点为 2*(i+1);节点i的父节点为 (i-1)>>1;(注意,计算父节点时,最好使用位操作,否则可
阅读全文
摘要:在此列举常用简单的排序算法,冒泡、插入、归并和快排,后边有机会再添加其他排序方法。 冒泡排序 思想:每次交换相邻元素,时间复杂度为O(N^2) private static void bubbleSort(int[] n) { //相邻元素交换位置,时间复杂度为O(N^2) for(int i =
阅读全文

浙公网安备 33010602011771号