寻找两个有序数组的中位数
今天的题目还是有些难度的,我们一起看看吧。题目:寻找两个有序数组的中位数描述:给定两个大小为m和n的有序数组nums1和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m+n))。你可以假设nums1和nums2不会同时为空。示例1:nums1=[1,3]nums2
无重复字符的最长子串
漫长的元旦假期结束啦,又该继续学习和进步了。第三题大家有没有很好的思路呢?和我一起回顾一下吧:题目:无重复字符的最长子串描述:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例:输入:"abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。解析有了题目0
LeetCode:两数相加
上一篇文章我们给出了今天的题目,大家有尝试过吗?题目:两数相加描述:描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字0之外,这两个数都不会
LeetCode:两数之和
2018年就要过去了,我也开始了LeetCode刷题的历程。LeetCode的第一题可以说是开胃菜,它的难度还不至于吓退一个诚心要刷题的人,也能给新来的一点信心。就从它开始LeetCode之旅吧。题目:两数之和描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两
查找
基本概念仅存储数据而不获取数据是不可能的,这就是查找。查找的定义如下:查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表(SearchTable)是由同一类型的数据元素(或记录)构成的集合。简单来说就是,在我们定义的数据结构中,查找位于某
树与二叉树
早在分析Java集合源码时,我们对树和二叉树就有了基本的了解,部分知识可以查看Java集合源码分析之基础(三):树与二叉树。本文在此基础上,介绍树和二叉树的存储、特性以及部分知识的Java参考代码。树的存储结构数据结构中定义的树,类似于下图:树示意图前面我们说过,计算机只能顺序或者链式存储数据,所以
栈与队列
前言数组与链表结构能够解决很多一对一的线性表问题,但是在许多情况下,使用最原始的数据结构过于复杂,而且不够安全。数组和链表都可以在任意位置增加和删除数据,但在一些场景下这个机制并不适用。比如我们要做一个排队系统,如果人们可以随意插队,那么所有人都会不满吧?栈与队列,就是在一些场景下对数组或链表的包装
线性表:数组与链表
前言线性表是指数据之间是一对一的关系,比如数组和链表都属于这一范畴。数组和链表又代表了两种存储方式:顺序存储和链式存储。部分知识在分析集合:Java集合源码分析之基础(一):数组与链表中已有阐述,这里不再赘述,本文是对这些概念的补充,以及给出可参考的Java代码实现。顺序存储顺序存储在大多数语言中定
数据结构与算法概述
初衷学习数据结构与算法的知识,并没有一个完备的理由。如果是作为一名算法工程师,这无可厚非,但对于我们大部分的开发者而言,算法对工作的影响甚微,甚至可能不需要任何算法就可以完成全部的工作。那么,我们为什么要学习数据结构与算法?我总结有以下几点:首先,算法是面试的常客。很多人会抱怨面试为何要问算法,工作
Java集合源码分析之Set概述与总结
Java集合源码分析系列到此就结束了,关于Set的知识会在这里进行简单的总结,除此之外,则是学习之后的一些感受。Set概述Set是一个包含不可重元素的集合,也就是所有的元素都是唯一的。文档说明如下:Acollectionthatcontainsnoduplicateelements.Moreform
Java集合源码分析之Map(五):LinkedHashMap
LinkedHashMap是HashMap的子类,所以也具备HashMap的诸多特性。不同的是,LinkedHashMap还维护了一个双向链表,以保证通过Iterator遍历时顺序与插入顺序一致。除此之外,它还支持AccessOrder,即按照元素被访问的顺序来排序,我们熟知的LRUCache底层就
Java集合源码分析之Map(四):HashMap
HashMap可能是我们使用最多的键值对型的集合类了,它的底层基于哈希表,采用数组存储数据,使用链表来解决哈希碰撞。在JDK1.8中还引入了红黑树来解决链表长度过长导致的查询速度下降问题。以下是文档对它的介绍中我们重点关注的部分:HashtablebasedimplementationoftheMa
Java集合源码分析之Map(三):TreeMap
TreeMap是红黑树的java实现,对红黑树不太了解的可以查阅历史文章:Java集合源码分析之基础(六):红黑树(RBTree)。红黑树能保证增、删、查等基本操作的时间复杂度为O(lgN)。本文将对TreeMap的源码进行分析。TreeMap结构图Entry定义staticfinalclassEn
Java集合源码分析之Map(二):SortedMap与NavigableMap
SortedMap由于乱序的数据对查找不利,例如无法使用二分法等降低算法的时间复杂度,如果数据在插入时就排好顺序,查找的性能就会提升很多。SortedMap接口就是为这种有序数据服务的。SortedMap接口需要数据的key支持Comparable,或者可以被指定的Comparator接受。Sort
Java集合源码分析之Map(一):超级接口Map
数组与链表在处理数据时各有优缺点,数组查询速度很快而插入很慢,链表在插入时表现优秀但查询无力。哈希表则整合了数组与链表的优点,能在插入和查找等方面都有不错的速度。我们之后要分析的HashMap就是基于哈希表实现的,不过在JDK1.8中还引入了红黑树,其性能进一步提升了。本文主要分析JDK中关于Map
Java集合源码分析之LinkedList
分析完了List与Queue之后,终于可以看看LinkedList的实现了。LinkedList弥补了ArrayList增删较慢的问题,但在查找方面又逊色于ArrayList,所以在使用时需要根据场景灵活选择。对于这两个频繁使用的集合类,掌握它们的源码并正确使用,可以让我们的代码更高效。Linked
Java集合源码分析之Queue(二):ArrayDeque
在介绍了Queue与Deque概念之后,这是要进行分析的第一个实现类。ArrayDeque可能大家用的都比较少,但其实现里有许多亮点还是值得我们关注的。Deque的定义为doubleendedqueue,也就是允许在两侧进行插入和删除等操作的队列。这个定义看起来很简单,那么我们怎么实现它呢?我们最容
Java集合源码分析之Queue(一):Queue与Deque
在日常生活中,排队几乎随处可见,上地铁要排队,买火车票要排队,就连出门吃个大餐,也要排队。。。之前研究的ArrayList就像是一个缺乏管理的排队系统。大家虽然会排队,但一会走个人,大家向前挪一挪,一会插个人,大家向后挪一挪,碰到这样的队伍,一定让人痛苦万分吧?今天要介绍的Queue就不同了,它是一
Java集合源码分析之List(二):ArrayList
做了这么多准备,终于到了ArrayList了,ArrayList是我们使用最为频繁的集合类了,我们先看看文档是如何介绍它的:Resizable-arrayimplementationoftheListinterface.Implementsalloptionallistoperations,andp
Java集合源码分析之List(一):超级接口List
以下内容结合源码阅读,更舒适哦~List是Collection三大直接子接口之一,其中的数据可以通过位置检索,用户可以在指定位置插入数据。List的数据可以为空,可以重复。以下是其文档注释,只看前两段:Anorderedcollection(alsoknownasasequence).Theuser