解析HashMap(三)——红黑树(TreeNode)一、概述 由于在JDK1.8中,在HashMap中为了提高性能新加了红黑树,在putVal()和remove()方法中都使用到了红黑树。我们来介绍HashMap中几个关键方法。 二、源码分析1. TreeNode 首先我们要知道, ...
解析HashMap(二)
解析HashMap(二)一、概述 JDK1.8中对HashMap做了很大的优化,其中最重要的优化就是其底层实现将原来的“数组+链表”改为“数组+链表+红黑树”。下面通过源码来分析HashMap。 二、源码分析:1. 常量:/* 默认的数组的长度 或者说 默认是buckets/bins的长度 ...
LeetCode-300-最长上升子序列
LeetCode-300-最长上升子序列1. 题目:Longest Increasing Subsequence 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度 ...
LeetCode-322-零钱兑换
LeetCode-322-零钱兑换1. 题目:零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 1 ...
LeetCode-062-不同路径
LeetCode-062-不同路径1. 题目:不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x ...
LeetCode-055-跳跃游戏
LeetCode-055-跳跃游戏1. 题目:跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 ...
LeetCode-160-相交链表
LeetCode-160-相交链表1. 题目:相交链表 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], ski ...
LeetCode-081-搜索旋转排序数组II
LeetCode-081-搜索旋转排序数组II1. 题目:搜索旋转排序数组II 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true ...
LeetCode-240-搜索二维矩阵 II
LeetCode-240-搜索二维矩阵 II1. 题目:搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: [ [1 ...
LeetCode-328-奇偶链表
LeetCode-328-奇偶链表1. 题目:奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes ...