自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雷震子的博客

一只程序猿

  • 博客(237)
  • 资源 (1)
  • 收藏
  • 关注

原创 Math.addExact() 函数理解

Math.addExact(),Jdk1.8 新增的方法,判断两数相加是否越界,源码如下:public static int addExact(int x, int y) { int r = x + y; // HD 2-12 Overflow iff both arguments have the opposite sign of the result if (((x ^ r) & (y ^ r)) < 0) { throw new Arithmet

2021-01-08 23:21:32 3231

原创 Integer.bitCount() 函数理解(尽量通俗易懂)

bitCount(int i) 函数,实现统计一个数的二进制位有多少个 1 。如 5 的二进制为 101,返回 2。Jdk1.8 源码如下。初看一脸懵逼,再看还是一脸懵逼,分析 2 小时后,轰然开朗,遂有此文。public static int bitCount(int i) { // HD, Figure 5-2 i = i - ((i >>> 1) & 0x55555555); i = (i & 0x33333333) + ((i >&g

2021-01-06 00:03:07 7903 15

原创 12个高矮不同的人,排成两排,逐步推导卡特兰数(Catalan)

12个高矮不同的人,排队问题。引出卡特兰数(Catalan)。等价问题1等价问题2【解法】传闻是【阿里巴巴笔试题】:12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?网上看了很多解答,但理解起来仍然费劲。索性自己动手,加强记忆。本文用2次 “等价证明” 将答案引到卡特兰数。不正之处,欢迎指出。等价问题1由6个0和6个1组成一个12位的二进制数,要求从左到右扫描,任意位置,0的累计数都不小于1的累计数,求满足条件的组合有多少种。【证

2020-07-01 23:21:30 2186

原创 LeetCode每日一题 745. 前缀和后缀搜索

设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词

2022-07-14 14:06:39 474 1

原创 LeetCode每日一题 1252. 奇数值单元格的数目

奇数值单元格的数目

2022-07-12 16:06:21 311

原创 LeetCode每日一题 794. 有效的井字游戏

794. 有效的井字游戏给你一个字符串数组 board 表示井字游戏的棋盘。当且仅当在井字游戏过程中,棋盘有可能达到 board 所显示的状态时,才返回 true 。井字游戏的棋盘是一个 3 x 3 数组,由字符 ' ','X' 和 'O' 组成。字符 ’' 代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(’ ')中。玩家 1 总是放字符 ‘X’ ,而玩家 2 总是放字符 ‘O’ 。‘X’ 和 ‘O’ 只允许放置在空位中,不允许对已放有字符的位置进行填充。当有 3 个相同(且非空

2021-12-09 15:09:46 453

原创 LeetCode 每日一题 743. 网络延迟时间

743. 网络延迟时间有 n 个网络节点,标记为 1 到 n。给你一个列表 imes,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。示例 1:输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2输出:2示例

2021-08-02 17:03:05 832

原创 LeetCode 每日一题 171. Excel表列序号

171. Excel表列序号给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回该列名称对应的列序号。例如,A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ...示例 1:输入: columnTitle = "A"输出: 1示例 2:输入: columnTitle = "AB"输出: 28示例 3:输入: columnTitle = "ZY"输出: 701

2021-07-30 16:08:34 175

原创 LeetCode 每日一题 671. 二叉树中第二小的节点

1893. 检查是否区域内所有整数都被覆盖给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。示例 1:输入:root = [2,2,5,null,null,5,7]输出:5解释:

2021-07-27 17:54:13 144

原创 LeetCode 每日一题 1893. 检查是否区域内所有整数都被覆盖

1893. 检查是否区域内所有整数都被覆盖给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= e

2021-07-23 17:48:32 147

原创 LeetCode 每日一题 剑指 Offer 52. 两个链表的第一个公共节点

剑指 Offer 52. 两个链表的第一个公共节点输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为

2021-07-21 11:11:27 123

原创 LeetCode 每日一题 1877. 数组中最大数对和的最小值

1877. 数组中最大数对和的最小值一个数对 (a,b) 的 数对和 等于 a + b 。最大数对和 是一个数对数组中最大的 数对和 。比方说,如果我们有数对 (1,5) ,(2,3) 和 (4,4),最大数对和 为 max(1+5, 2+3, 4+4) = max(6, 5, 8) = 8 。给你一个长度为 偶数 n 的数组 nums ,请你将 nums 中的元素分成 n / 2 个数对,使得:nums 中每个元素 恰好 在 一个 数对中,且最大数对和 的值 最小 。请你在最优数对划分

2021-07-20 10:54:24 160

原创 LeetCode 每日一题 1846. 减小和重新排列数组后的最大元素

1846. 减小和重新排列数组后的最大元素给你一个正整数数组 arr 。请你对 arr 执行一些操作(也可以不进行任何操作),使得数组满足以下条件:arr 中 第一个 元素必须为 1 。任意相邻两个元素的差的绝对值 小于等于 1 ,也就是说,对于任意的 1 <= i < arr.length (数组下标从 0 开始),都满足 abs(arr[i] - arr[i - 1]) <= 1 。abs(x) 为 x 的绝对值。你可以执行以下 2 种操作任意次:减小 arr 中任意元

2021-07-15 11:15:44 214

原创 LeetCode 每日一题 981. 基于时间的键值存储

981. 基于时间的键值存储创建一个基于时间的键值存储类 TimeMap,它支持下面两个操作:1.set(string key, string value, int timestamp)存储键 key、值 value,以及给定的时间戳 timestamp。2.get(string key, int timestamp)返回先前调用 set(key, value, timestamp_prev) 所存储的值,其中 timestamp_prev <= timestamp。如果有多个这样的

2021-07-10 11:33:06 133 2

原创 LeetCode 每日一题 1418. 点菜展示表

1418. 点菜展示表给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第一列为餐桌桌号 “Table” ,后面每一列都是按字母顺序排列的餐品名称。接下来每一行中的项则表示每张餐桌订购的

2021-07-06 22:15:30 133

原创 LeetCode 每日一题 1833. 雪糕的最大数量

1833. 雪糕的最大数量夏日炎炎,小男孩 Tony 想买一些雪糕消消暑。商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费,他想要买尽可能多的雪糕。给你价格数组 costs 和现金量 coins ,请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。注意:Tony 可以按任意顺序购买雪糕。示例 1:输入:costs = [1,3,2,4,1], c

2021-07-02 22:56:27 251

原创 LeetCode 每日一题 1035. 不相交的线

1035. 不相交的线在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。示例 1:输入:nums1 = [1,4,2], nums2 = [1,2,4]输出:2

2021-05-21 18:45:39 249

原创 LeetCode 每日一题 692. 前K个高频单词

692. 前K个高频单词给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love"]解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。 注意,按字母顺序 "i" 在 "love" 之前。示例 2:输入: ["the", "

2021-05-20 22:55:59 182

原创 LeetCode 每日一题 993. 二叉树的堂兄弟节点

993. 二叉树的堂兄弟节点在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。示例 1:输入:root = [1,2,3,4], x = 4, y = 3输出:false示例 2:输入:root

2021-05-17 14:45:38 144

原创 LeetCode 每日一题 13. 罗马数字转整数

13. 罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX +

2021-05-15 17:17:00 139

原创 LeetCode 每日一题 12. 整数转罗马数字

12. 整数转罗马数字罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX +

2021-05-14 11:33:16 125

原创 LeetCode 每日一题 1482. 制作 m 束花所需的最少天数

1482. 制作 m 束花所需的最少天数给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。示例 1:输入:bloomDay = [1,10,3,10,2], m = 3, k = 1输出:3解释:让我们一起观察这三天的花开过程

2021-05-09 16:57:27 168

原创 LeetCode 每日一题 1486. 数组异或操作

1486. 数组异或操作给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果。示例 1:输入:n = 5, start = 0输出:8解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。 "^" 为按位异或 XOR 运算符。示例 2:输入:n = 4,

2021-05-07 15:34:17 165

原创 LeetCode 每日一题 1720. 解码异或后的数组

1720. 解码异或后的数组未知 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。示例 1:输入:encoded =

2021-05-06 21:10:05 181

原创 LeetCode 每日一题 740. 删除并获得点数

740. 删除并获得点数给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 6 个点数。示例 2:输入:nu

2021-05-05 10:58:39 648

原创 LeetCode 每日一题 1473. 粉刷房子 III

1473. 粉刷房子 III在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n )。有的房子去年夏天已经涂过颜色了,所以这些房子不需要被重新涂色。我们将连续相同颜色尽可能多的房子称为一个街区。(比方说 houses = [1,2,2,3,3,2,1,1] ,它包含 5 个街区 [{1}, {2,2}, {3,3}, {2}, {1,1}] 。)给你一个数组 houses ,一个 m * n 的矩阵 cost 和一个整数 target ,其中:ho

2021-05-04 15:08:03 212

原创 LeetCode 每日一题 7. 整数反转

7. 整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-2^31 <= x <= 2^31 - 1

2021-05-03 09:49:05 179

原创 LeetCode 每日一题 554. 砖墙

554. 砖墙你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和应该相等。你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量

2021-05-02 00:47:00 246

原创 LeetCode 每日一题 690. 员工的重要性

690. 员工的重要性给定一个保存员工信息的数据结构,它包含了员工 唯一的 id ,重要度 和 直系下属的 id 。比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是 [1, 15, [2]] ,员工 2的 数据结构是 [2, 10, [3]] ,员工 3 的数据结构是 [3, 5, []] 。注意虽然员工 3 也是员工 1 的一个下属,但是由于 并不是直系 下属,因此没有体现在员工 1 的数据结构中。现在输入一个

2021-05-01 01:14:52 203 2

原创 LeetCode 每日一题 137. 只出现一次的数字 II

只出现一次的数字 II给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。示例 1:输入:nums = [2,2,3,2]输出:3示例 2:输入:nums = [0,1,0,1,0,1,99]输出:99提示:1 <= nums.length <= 3 * 10^4-2^31 <= nums[i] <= 2^31 - 1nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三

2021-04-30 11:41:34 306

原创 LeetCode 每日一题 403. 青蛙过河

403. 青蛙过河一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。给你石子的位置列表 stones(用单元格序号 升序 表示), 请判定青蛙能否成功过河(即能否在最后一步跳至最后一块石子上)。开始时, 青蛙默认已站在第一块石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格 1 跳至单元格 2 )。如果青蛙上一步跳跃了 k 个单位,那么它接下来的跳跃距离只能选择为 k - 1、k 或 k + 1

2021-04-29 18:32:27 188

原创 LeetCode 每日一题 633. 平方数之和

633. 平方数之和给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。示例 1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2:输入:c = 3输出:false示例 3:输入:c = 4输出:true示例 4:输入:c = 2输出:true示例 5:输入:c = 1输出:true提示:0 <= c <= 2^31 - 1方法一:双指针左边界 left = 0,右边界

2021-04-28 14:20:51 141

原创 LeetCode 每日一题 938. 二叉搜索树的范围和

938. 二叉搜索树的范围和给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。示例 1:输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10输出:23提示:树中节点数目在范围 [1, 2 * 10^4] 内1 <= Node.val <

2021-04-27 17:38:26 93

原创 LeetCode 每日一题 1011. 在 D 天内送达包裹的能力

1011. 在 D 天内送达包裹的能力传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出:15解释:船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:第 1 天:1,

2021-04-26 20:40:35 200

原创 LeetCode 每日一题 897. 递增顺序搜索树

897. 递增顺序搜索树给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。示例 1:输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]示例 2:输入:root = [5,1,7]输出:[1,null,5,null,7]

2021-04-25 19:44:35 491

原创 LeetCode 每日一题 377. 组合总和 Ⅳ

377. 组合总和 Ⅳ给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。示例 2:输

2021-04-24 17:09:06 302

原创 LeetCode 每日一题 368. 最大整除子集

368. 最大整除子集给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。示例 1:输入:nums = [1,2,3]输出:[1,2]解释:[1,3] 也会被视为正确答案。示例 2:输入:nums = [1

2021-04-23 22:08:05 302

原创 LeetCode 每日一题 363. 矩形区域不超过 K 的最大数值和

363. 矩形区域不超过 K 的最大数值和给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。题目数据保证总会存在一个数值和不超过 k 的矩形区域。示例 1:输入:matrix = [[1,0,1],[0,-2,3]], k = 2输出:2解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。示例 2:输入:matrix = [[2,2,-1]],

2021-04-23 00:19:46 197

原创 LeetCode 每日一题 91. 解码方法

91. 解码方法一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> 1'B' -> 2...'Z' -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:"AAJF" ,将消息分组为 (1 1 10 6)"KJF" ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射

2021-04-21 23:48:35 192

原创 LeetCode 每日一题 27. 移除元素

27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任

2021-04-19 22:44:27 258

阿里巴巴开发手册-Java-华山版

阿里巴巴java开发规范华山版。

2020-07-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除