数据结构
文章平均质量分 76
huan-yong
这个作者很懒,什么都没留下…
展开
-
最长递增子序列(LIS)问题
public ArrayList LIS(int[] arr) //获取最长递增子序列 { ArrayList array = new ArrayList(); int len = arr.length; if(len==0) //数组长度为0 return array; int[] f = new int[len]; //记录以当前元素作为尾元素的最长递增子序列长度原创 2016-04-28 18:29:13 · 375 阅读 · 0 评论 -
最短子数组
最短子数组问题描述: 给定一个数组a和数组长度n,求出需要排序的最短子数组长度,使得该子数组排好序时整个数组有序。测试样例:输入:a={1,4,6,5,9,10}, n=6输出:2问题分析: 由题意知,我们需要找到一个子数组使得当该子数组排好序时整个数组有序。这就是说原数组可以分为三个部分,即a=pqk,此时我们找到的子数组为q。p和r已经分别有序且p中所有元素小于q中任意一个元素,k中任原创 2016-05-13 16:19:59 · 998 阅读 · 0 评论 -
RMQ问题分析
RMQ问题是一类经典问题,在ACM编程竞赛中我们经常会见到它的身影。其中RMQ是Range Minimium/Maxmium Query的缩写形式,代表区间最小/最大值查询。问题描述为:对一个已知长度为n的数组a,给出多组区间[i,j],对于每个区间给出该区间的最值。该问题需要注意的地方是要处理多组数据。 常规解法是直接遍历区间[i,j]对应的数组元素,然后找出所求的最值。该方法在只有一次查询原创 2016-05-26 15:32:56 · 496 阅读 · 0 评论 -
判定链表是否有环
class ListNode //链表节点定义{ int val; ListNode next; public ListNode(int val) { super(); this.val = val; this.next = null; } }public boolean existCircle(ListNode head) //判定链表是否有环 { if(he原创 2016-04-21 21:36:14 · 407 阅读 · 0 评论 -
tarjan算法介绍与分析
tarjan算法是一个求取有向图的所有强连通分量的算法,它是以算法提出者Robert Tarjan的名字来命名的。提出此算法的Robert Tarjan是普林斯顿大学的教授,同时他也是1986年的图灵奖获得者(图灵奖是计算机领域的最高荣誉,和物理、化学领域的诺贝尔奖是一个层次的奖项)。 在详细讲述该算法之前,我们需要明确几个概念(注意该算法的研究对象是有向图,无向图没有强连通等概念)。 1.原创 2016-05-20 15:03:53 · 900 阅读 · 0 评论 -
Trie树学习笔记
Trie树:字典树,单词查找树特点:根节点不包含元素;将根到当前节点路径上的字符连接起来,即为该节点对应的字符串;每个节点的子节点对应的字符串各不相同;对n个字符串构建字典树,时间复杂度为O(n*len),len表示字符串的平均长度;对字典树查找的时间复杂度为O(len),len为待查找字符串的长度;以空间换时间。应用:在n个字符串中,判断是否存在某个字符串是另一个字符串的前缀;对原创 2017-03-01 15:25:45 · 240 阅读 · 0 评论 -
HashMap学习笔记
HashMap:实现了Map接口,底层数据结构是散列表。 特点:key和value允许null值;不是线程安全的。散列表主要成分:初始容量(槽位数),Java中设置为16;装载因子(定义为:存储元素数 / 槽位数,一般设置为0.75):如果用拉链法解决冲突,则装载因子对应一个链表的平均存储元素数;散列函数,Java中扩容采用2倍方式;冲突解决方案:主要有拉链法和开放寻址法(线性探查,原创 2017-02-26 11:58:34 · 293 阅读 · 0 评论