![](https://img-blog.csdnimg.cn/20190430164506584.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法
NeilNiu
日拱一卒无有尽,功不唐捐终入海!
展开
-
JDK1.8中HashMap的源码分析
关键的属性分析public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { //Node类型的数组,我们常说的bucket数组,其中每个元素为链表或者树形结构 transient Node<...原创 2020-04-19 22:45:03 · 153 阅读 · 0 评论 -
散列表(Hash表)
散列表的概述散列结构,散列表(Hash Table)又名哈希表/Hash表是根据键(key)直接访问在内存存储位置的数据结构,利用了数组支持按照下标进行随机访问数据的特性。由数组演变而来的,存的时候,我们这有键key,通过一定散列函数的计算方式,我们把它映射到数组中的某一个位置上进行存储,这样一种关系。取的时候,同一个key根据hash进行运算的结果也是一样的,这样就可以快速找到数组中存储的位...原创 2020-04-19 22:44:54 · 826 阅读 · 0 评论 -
三大类算法:递归、排序、二分查找
一、递归”递“+”归“。 这两个意思,正是递归思想的精华所在,去的过程叫做递,回来的过程叫做归,在编程语言中对递归可以简单理解为:方法自己调用自己,只不过每次调用时参数不同而已。满足递归的条件:1、递归表达是(规律)如果一个问题的解能够拆分成多个子问题的解,拆分之后,子问题和该问题在求解上除了数据规模不一样之外,求解的思路和该问题的求解思路完全相同,也就是说能够找到一种规律,这种规...原创 2020-05-17 09:25:10 · 2183 阅读 · 0 评论 -
时间复杂度,空间复杂度
算法的复杂度分析主要包含两个方面:时间复杂度分析空间复杂度分析为什么要进行复杂度分析?1:和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。2:掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。1:时间复杂度表示法算法的执行效率,粗略地讲,就是算法代码执行的时间,那如何在不直接运行代码的前提下粗略的计算执行时间呢?...原创 2020-04-04 10:48:34 · 246 阅读 · 0 评论 -
Stack源码分析
Stack源码分析Stack底层是数组实现是顺序栈,底层也支持扩容首先写一段入栈和出栈的程序public class JdkStack { public static void main(String[] args) { //创建栈对象 Stack stack = new Stack(); //数据入栈 stac...原创 2020-04-04 10:48:15 · 159 阅读 · 0 评论 -
LinkedList源码分析
LinkedList源码分析原创 2020-04-04 10:47:44 · 94 阅读 · 0 评论 -
ArrayList源码分析
public class ArrayList{ public static void main(String[] args){ List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add...原创 2020-04-04 10:47:26 · 212 阅读 · 0 评论 -
数组、链表、栈、队列
1、理解什么是线性表2、掌握数组数据结构,读懂ArrayList的部分源码3、掌握链表数据结构,读懂LinkedList的部分源码4、掌握栈这种数据结构,读懂stack的部分源码5、掌握队列这种数据结构...原创 2020-04-04 10:46:29 · 494 阅读 · 0 评论 -
十一、数组-移动零
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数class Solution { public void moveZeroes(int[] nums) { ...原创 2019-06-15 11:55:45 · 106 阅读 · 0 评论 -
十、字符串-替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Solution { public String replaceSpace(StringBuffer str) { if(str ==null){ retur...原创 2019-05-30 22:06:10 · 231 阅读 · 0 评论 -
九、数组中存在重复
给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: trueclass Solution {...原创 2019-05-22 21:24:22 · 165 阅读 · 0 评论 -
八、旋转数组
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输入: [-1,-100,3,...原创 2019-05-21 21:16:57 · 100 阅读 · 0 评论 -
七、最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。class Solution ...原创 2019-05-13 21:20:16 · 96 阅读 · 0 评论 -
六、实现 strStr() 函数
给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"输出: -1...原创 2019-05-13 21:18:48 · 143 阅读 · 0 评论 -
五、字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.注意事项:您可以假定该字符串只包含小写字母思路:1、遍历字符串,取每个索引所对应的字符(charAt(s))2、取字符第一次出现的索引值和最后一次出现索引值进行对比(indexO...原创 2019-05-11 12:00:50 · 267 阅读 · 0 评论 -
四、验证回文字符串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false定义头尾指针,从头尾遍历判断字符是否相等(非数字/非字符则跳过)class...原创 2019-05-08 20:30:04 · 149 阅读 · 0 评论 -
三、有效的字母异位词
给定两个字符串s和t,编写一个函数来判断t是否是s的一个字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:假设字符串只包含小写字母。class Solution { public boolean isA...原创 2019-05-07 21:52:08 · 99 阅读 · 0 评论 -
二、整数反转
示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21class Solution { public int reverse(int x) { int res = 0; while(x !=0){ int temp = res * 1...原创 2019-04-30 18:37:25 · 113 阅读 · 0 评论 -
一、字符串反转
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。class Solution { public void reverseString(char[] s) { int strLength=s.length; for (int i = 0; i < strLength/2; i++) { ...原创 2019-04-29 18:51:10 · 146 阅读 · 0 评论