
数据结构
每天开心成为别人的望尘莫及
这个作者很懒,什么都没留下…
展开
-
HashMap底层原理
HashMap不是线程安全的。那在哪些特定情况下会有线程安全的问题? 扩容(put)HashMap的数据结构是什么?(即:底层是怎么实现的?实现的原理是什么?)---数组、链表、红黑树JDK8对HashMap优化哪块? 数组+链表 --->数组+链表+红黑树怎么去了解它的技术本质?存储内容:key value存储结构:数组+链表+红黑树(JDK8)...原创 2019-04-26 17:03:23 · 136 阅读 · 0 评论 -
49. Group Anagrams
属于hashTable题目描述:Given an array of strings, group anagrams together.Example:Input: ["eat", "tea", "tan", "ate", "nat", "bat"],Output:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]No...原创 2019-05-29 16:44:41 · 189 阅读 · 0 评论 -
3. Longest Substring Without Repeating Characters 没有重复字符的最长子串
hashtable题目描述:Given a string, find the length of thelongest substringwithout repeating characters.Example 1:Input: "abcabcbb"Output: 3 Explanation: The answer is "abc", with the length of...原创 2019-05-29 17:17:19 · 134 阅读 · 0 评论 -
数据流中的中位数(ArrayList , 堆排序)
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思路:方法1、ArrayList不是说ArrayList是有序的吗???自己太low了,这...原创 2019-06-14 10:01:45 · 501 阅读 · 0 评论 -
数组中出现次数超过一半的数字**
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。反思:这个看过,也做过,但是又忘记了,像这样的题目,就要背下来思路:方法一:排序 O(n logn)方法二:基于快排的O(n)算法基于方法:找到数组中任意第k...原创 2019-06-10 09:19:41 · 132 阅读 · 0 评论 -
最小的k个数*****
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:方法一:和上一个题目“数组中次数超过一半的数字”类似,平均时间复杂度是O(n),找出来的k个数字不一定是排序的,而且会修改输入的数组注意:每次去一半的数组去寻找就好import java.util.ArrayList;public cla...原创 2019-06-10 09:44:17 · 146 阅读 · 0 评论 -
连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序...原创 2019-06-10 14:21:56 · 104 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。思路:方法一:最笨的方法不断的对每个数进行除法+求余操作,来统...原创 2019-06-10 15:22:44 · 193 阅读 · 0 评论 -
《剑指offer》 要背的代码
目录3--二维数组中的查找(过)背:题4:替换空格(过)背:String与StringBuffer之间的转换类似的题目题目5:从尾到头打印链表(过)背:ArrayList的用法ArrayList的源码分析:题6 :重建二叉树(过)背:三种遍历(前序、中序、后序)的六种实现(递归、循环--栈)、层次遍历39--二叉树的深度(过)18--树的子结构(...原创 2019-06-20 11:34:32 · 1525 阅读 · 0 评论 -
表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路:思路都写在了注释了,有个测试样例没有通过:1a3.14解决:最后判断一下是否已经遍历到最后一个字符了。publi...原创 2019-06-11 15:19:24 · 151 阅读 · 0 评论 -
滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,...原创 2019-06-12 09:08:39 · 142 阅读 · 0 评论 -
链表中环的入口地址
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路:该题目:可以用一个hash存储链表节点的地址,每遍历下一个节点的时候,判断该节点是否已经遍历过了HashSet存储单个元素,可以判断是否存在该元素HashSet<ListNode> set = new HashSet<ListNode>();变形题(1):如果知...原创 2019-06-12 09:35:30 · 144 阅读 · 0 评论 -
删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:一次通过:/* public class ListNode { int val; ListNode next = null;...原创 2019-06-12 09:51:25 · 143 阅读 · 0 评论 -
347. Top K Frequent Elements
题目:Given a non-empty array of integers, return thekmost frequent elements.Example 1:Input: nums = [1,1,1,2,2,3], k = 2Output: [1,2]Example 2:Input: nums = [1], k = 1Output: [1]Note:...原创 2019-05-29 15:54:18 · 151 阅读 · 0 评论 -
96. Binary Tree Inorder Traversal
题目描述:Given a binary tree, return theinordertraversal of its nodes' values.Example:Input: [1,null,2,3] 1 \ 2 / 3Output: [1,3,2]Follow up:Recursive solution is trivial, ...原创 2019-05-29 15:14:36 · 144 阅读 · 0 评论 -
字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:step1、首先求可能出现在第一个位置的所有字符step2、然后把整个字符串分成两部分,第一部分是第一个字...原创 2019-06-06 16:35:10 · 109 阅读 · 0 评论 -
哈希表
浅谈算法和数据结构: 十一 哈希表摘自:https://www.cnblogs.com/yangecnu/p/Introduce-Hashtable.html 在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度:可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的...转载 2019-04-19 10:10:12 · 144 阅读 · 0 评论 -
剑指Offer
丑数public class Solution { public int GetUglyNumber_Solution(int index) { if(index==0) return 0; if(index==1) return 1; int [] res = new int [index]; res[0] = 1;...原创 2019-04-24 10:10:46 · 116 阅读 · 0 评论 -
438. Find All Anagrams in a String 找出字符串中所有的变位词
Given a stringsand anon-emptystringp, find all the start indices ofp's anagrams ins.Strings consists of lowercase English letters only and the length of both stringssandpwill not be large...原创 2019-05-27 11:43:36 · 160 阅读 · 0 评论 -
739. Daily Temperatures
给定一个每日温度的数组,生成一个数组,要求:对于新数组的每个元素,是你需要等待更暖和的天数。如果接下去没有更暖的天了,那就用0替代。比如,给定数组temperatures = [73, 74, 75, 71, 69, 72, 76, 73], 你需要输出[1, 1, 4, 2, 1, 1, 0, 0].原数组第1天是73度,第2天74度是更暖和的一天,所以新数组第1元素就是1.注:数...原创 2019-05-27 15:16:41 · 171 阅读 · 0 评论 -
148. Sort List 给链表排序
题目描述:Sort a linked list inO(nlogn) time using constant space complexity.Example 1:Input: 4->2->1->3Output: 1->2->3->4Example 2:Input: -1->5->3->4->0Outp...原创 2019-05-30 15:56:09 · 359 阅读 · 0 评论 -
142. Linked List Cycle II 找到环的起始位置
Example 1:Input: head = [3,2,0,-4], pos = 1Output: tail connects to node index 1Explanation: There is a cycle in the linked list, where tail connects to the second node.Example 2:Input: h...原创 2019-05-30 18:44:07 · 225 阅读 · 0 评论 -
对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。一次通过/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {...原创 2019-06-12 14:15:10 · 174 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:充分利用双端队列:思路都在注释里面了import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; ...原创 2019-06-12 14:42:57 · 136 阅读 · 0 评论 -
二叉树与中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:做题之前,先写个思路:先根遍历二叉树,记录前面遍历过的节点并且累计“节点和”,当遍历到根的时候,恰巧也等于给定的值,这个路径就是我们需要的,那就添加到ArrayList...原创 2019-06-06 09:24:36 · 138 阅读 · 0 评论 -
复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路:一、最复杂,时间复杂度是O(n*n)step1、把“指向下一个节点” 的指针都复制一遍step2、在复制随机节点,先遍历原链表看随机节点指向了第几个,就...原创 2019-06-06 14:13:43 · 100 阅读 · 0 评论 -
二叉搜索树和双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:首先什么叫二叉搜索树?如果一个节点的左子树不为空,那么左子树上的数字均小于该节点的值;如果右子树不为空,则右子树上的所有节点的值均大于该节点。怎么转换成一个排序的双向链表?这是一个递归的思想:中序遍历的思想:来了一个节点node, 如果有...原创 2019-06-06 15:06:03 · 125 阅读 · 0 评论 -
把二叉树打印多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:和“按之字形顺序打印二叉树”是一样的做法我 是 用两个双端队列尝试用一个双端队列 是不行的import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNod...原创 2019-06-13 09:29:51 · 191 阅读 · 0 评论 -
经典排序算法,重写排序方法
//从小到大 public static void main(String[] args) { int [] a = {8,6,5,9,11,2,4}; kuaipai(a); for(int i = 0 ;i<a.length;i++){ System.out.println(a[i]); }...原创 2019-07-04 17:35:14 · 725 阅读 · 0 评论