- 博客(39)
- 收藏
- 关注
原创 集合 小记2
同:都是set的实现类,都能保证元素唯一,都是线程不安全的异:HashSet基于哈希表(HashMap),不需要保证插入和取出的顺序。LinkedHashSet基于链表和哈希表(LinkedHashMap),元素的插入和取出顺序满足FIFO。TreeSet基于红黑树,元素可以自然排序或者定制排序。
2023-09-19 22:49:02 57
原创 第十一关|压缩存储
只有4KB的空间,能寻址8*4*2^10个比特,这个值比32000大,可以创建32000比特的比特数组,其中一个比特位置就代表一个整数。如果发现数组元素是v,那么就将位置为v的设置为1,碰到重复元素,就输出。= 0 判断数组下标的某一位是不是0,下标1个可能对应着4位。给定一个数组,包含从1到N的整数,N最大为32000,数组可能还有重复值,且N的取值不定,若只有4KB的内存可用,如何打印数组中所有重复元素。32000位对应长度1000的字节数组,1字节4bit。
2023-09-15 23:39:05 36
原创 第十一关|位移妙用
法一:每位都判断是否是1,(n >> i) & 1:将每一位移到最低位,与1相与后,其他位为0,最低为是0就是0,最低为1就是1,所以对每一位计算后的结果相加,就得到1的个数。时间复杂度:O(K),K是二进制位数。空间复杂度:O(1)。法二:根据1的数量循环:n & (n - 1)可以消除最后一位1,该位变为0。这样只用进行1的数量个数的循环就可以,消完所有1,值变为0时,就可以统计出1的个数。
2023-09-14 23:32:34 66
原创 第十关|归并排序
合并时,比较两个区间的元素(双指针),谁小,暂存数组存谁,同时移动指针,直到一个数组的元素已经存完,将另一个数组剩下的元素存入暂存数组。不断分成左右两个区间,当每个区间只剩一个元素时不再分了,开始合并。用一个暂存数组,存储不断合并后的结果,将合并的最终结果赋给原数组。不断递归划分左右区间,之后再合并,有点类似于二叉树的后序遍历。
2023-09-11 20:45:28 37
原创 第九关|中序遍历的应用
要求高度平衡:选择升序序列的中间元素作为根节点,以该元素左边的升序序列构建左子树,以该元素右边的升序序列构建右子树。时间复杂度:o(n),空间复杂度:o(log n)有序数组转为二叉搜索树。
2023-09-08 21:26:00 45
原创 第八关|公共祖先问题
遇到一个p/q,然后直接向上返回这个p/q(不是p/q都返回null)。如果在某个节点遇到另一子树也返回上来了p/q(即两子树返回值均不为空),这个节点就是最近公共祖先。一直遇不到的话这个被一直向上返回的p/q就最终被返回(另一个没有被发现的q/p是这个节点的后代)。题目给出了p,q都是树里的节点。那么假如第二层的左节点是p,与它同层的节点(即二叉树第二层右节点)没找到q,则q一定在p的子树里,因为q是树里的节点。r代表递归右子树的返回值(即right)l代表递归左子树的返回值(即left)
2023-09-05 10:56:33 32
原创 第八关|二叉树深度问题
通过自下而上遍历每个节点,并且计算差值是否平衡,不平衡返回-1直到最上层,表示不平衡。通过自上而下遍历每个节点,并且对每个节点的左右节点深度做对比。若某节点左右平衡,则把它的高度返回,以便上层节点计算差值。与后序遍历类似,先算出左右子树的结果再进行相关操作。在以层为单位操作时,每层操作结束,将层数+1。
2023-09-04 19:18:35 39
原创 第七关|理解递归
以上:1.和2.的n在不断缩小;3.的范围缩小到左子树和右子树在执行递归,一定会有一个终止条件。不然一直递归下去,直到栈溢出,抛出异常。一个方法的递归调用可以多次,加一些逻辑处理。
2023-08-30 20:50:29 39
原创 第四关|栈经典问题
leetcode20示例:输入:s = "()[]{}"输出:true用HashMap将每对左括号作key,右括号作value遍历字符串,当前元素是key则压栈;遇到不是key则弹出栈顶,若栈顶所对应的value值与当前元素不同说明不匹配,不是一对括号。若应当弹出栈顶时,栈中无元素,说明只有右括号,没有左括号,匹配失败。若遍历完后,栈中不为空,则说明有多余的左括号没有匹配上,匹配失败。
2023-08-23 17:04:12 33
原创 集合 小记
ConcurrentHashMap, jdk7---->分段锁(可重入互斥锁)(有16个),jdk8---->CAS算法,synchronized可重入锁,volatile关键字,线程安全,键不可重复,值可以重复。HashSet -----------> Hashcode和equals比较;Hashtable--------->对象的hashcode。HashMap------>重新计算hash值。Collection--->单列集合顶层接口。Collections---->集合工具类。
2023-08-20 09:25:42 64 1
原创 第二关|区间反转问题解析
示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]
2023-08-20 09:14:47 50 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人