Leetcode-cn.com 2022-06-13
🟢 1051.height-checker
🏷️ Tags
#array #counting_sort #sorting
Description
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。
排序后的高度情况用整数数组
给你一个整数数组
返回满足
Example
🟢 1051.height-checker
🏷️ Tags
#array #counting_sort #sorting
Description
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。
排序后的高度情况用整数数组
expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。给你一个整数数组
heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。返回满足
heights[i] != expected[i] 的 下标数量 。Example
输入:heights = [1,1,4,2,1,3]
输出:3
解释:
高度:[1,1,4,2,1,3]
预期:[1,1,1,2,3,4]
下标 2 、4 、5 处的学生高度不匹配。
Leetcode-cn.com 2022-06-14
🟡 498.diagonal-traverse
🏷️ Tags
#array #matrix #simulation
Description
给你一个大小为
Example
🟡 498.diagonal-traverse
🏷️ Tags
#array #matrix #simulation
Description
给你一个大小为
m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。Example
输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,4,7,5,3,6,8,9]
Leetcode-cn.com 2022-06-15
🔴 719.find-k-th-smallest-pair-distance
🏷️ Tags
#array #two_pointers #binary_search #sorting
Description
数对
给你一个整数数组
Example
🔴 719.find-k-th-smallest-pair-distance
🏷️ Tags
#array #two_pointers #binary_search #sorting
Description
数对
(a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。给你一个整数数组
nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 <= i < j < nums.length 。返回 所有数对距离中 第 k 小的数对距离。Example
输入:nums = [1,3,1], k = 1
输出:0
解释:数对和对应的距离如下:
(1,3) -> 2
(1,1) -> 0
(3,1) -> 2
距离第 1 小的数对是 (1,1) ,距离为 0 。
Leetcode-cn.com 2022-06-16
🟡 532.k-diff-pairs-in-an-array
🏷️ Tags
#array #hash_table #two_pointers #binary_search #sorting
Description
给定一个整数数组和一个整数
这里将 k-diff 数对定义为一个整数对
注意,
Example
🟡 532.k-diff-pairs-in-an-array
🏷️ Tags
#array #hash_table #two_pointers #binary_search #sorting
Description
给定一个整数数组和一个整数
k,你需要在数组里找到 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。这里将 k-diff 数对定义为一个整数对
(nums[i], nums[j]),并满足下述全部条件:0 <= i < j < nums.length|nums[i] - nums[j]| == k注意,
|val| 表示 val 的绝对值。Example
输入:nums = [3, 1, 4, 1, 5], k = 2
输出:2
解释:数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。
尽管数组中有两个1,但我们只应返回不同的数对的数量。
Leetcode-cn.com 2022-06-17
🟢 1089.duplicate-zeros
🏷️ Tags
#array #two_pointers
Description
给你一个长度固定的整数数组
注意:请不要在超过该数组长度的位置写入元素。
要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。
Example
🟢 1089.duplicate-zeros
🏷️ Tags
#array #two_pointers
Description
给你一个长度固定的整数数组
arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意:请不要在超过该数组长度的位置写入元素。
要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。
Example
输入:[1,0,2,3,0,4,5,0]
输出:null
解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]
Leetcode-cn.com 2022-06-18
🟡 剑指 Offer II 029.4ueAj6
🏷️ Tags
#linked_list
Description
给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素
给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。
如果有多个满足条件的插入位置,可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序。
如果列表为空(给定的节点是
Example
🟡 剑指 Offer II 029.4ueAj6
🏷️ Tags
#linked_list
Description
给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素
insertVal ,使这个列表仍然是循环升序的。给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。
如果有多个满足条件的插入位置,可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序。
如果列表为空(给定的节点是
null),需要创建一个循环有序列表并返回这个节点。否则。请返回原先给定的节点。Example
输入:head = [3,4,1], insertVal = 2
输出:[3,4,1,2]
解释:在上图中,有一个包含三个元素的循环有序列表,你获得值为 3 的节点的指针,我们需要向表中插入元素 2 。新插入的节点应该在 1 和 3 之间,插入之后,整个列表如上图所示,最后返回节点 3 。
Leetcode-cn.com 2022-06-19
🟡 508.most-frequent-subtree-sum
🏷️ Tags
#tree #depth_first_search #hash_table #binary_tree
Description
给你一个二叉树的根结点
一个结点的 「子树元素和」 定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。
Example
🟡 508.most-frequent-subtree-sum
🏷️ Tags
#tree #depth_first_search #hash_table #binary_tree
Description
给你一个二叉树的根结点
root ,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。一个结点的 「子树元素和」 定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。
Example
输入: root = [5,2,-3]
输出: [2,-3,4]
Leetcode-cn.com 2022-06-20
🔴 715.range-module
🏷️ Tags
#design #segment_tree #ordered_set
Description
Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。
半开区间
实现
Example
🔴 715.range-module
🏷️ Tags
#design #segment_tree #ordered_set
Description
Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。
半开区间
[left, right) 表示所有 left <= x < right 的实数 x 。实现
RangeModule 类:RangeModule() 初始化数据结构的对象。void addRange(int left, int right) 添加 半开区间 [left, right),跟踪该区间中的每个实数。添加与当前跟踪的数字部分重叠的区间时,应当添加在区间 [left, right) 中尚未跟踪的任何数字到该区间中。boolean queryRange(int left, int right) 只有在当前正在跟踪区间 [left, right) 中的每一个实数时,才返回 true ,否则返回 false 。void removeRange(int left, int right) 停止跟踪 半开区间 [left, right) 中当前正在跟踪的每个实数。Example
输入
["RangeModule", "addRange", "removeRange", "queryRange", "queryRange", "queryRange"]
[[], [10, 20], [14, 16], [10, 14], [13, 15], [16, 17]]
输出
[null, null, null, true, false, true]
解释
RangeModule rangeModule = new RangeModule();
rangeModule.addRange(10, 20);
rangeModule.removeRange(14, 16);
rangeModule.queryRange(10, 14); 返回 true (区间 [10, 14) 中的每个数都正在被跟踪)
rangeModule.queryRange(13, 15); 返回 false(未跟踪区间 [13, 15) 中像 14, 14.03, 14.17 这样的数字)
rangeModule.queryRange(16, 17); 返回 true (尽管执行了删除操作,区间 [16, 17) 中的数字 16 仍然会被跟踪)
Leetcode-cn.com 2022-06-21
🟢 1108.defanging-an-ip-address
🏷️ Tags
#string
Description
给你一个有效的 IPv4 地址
所谓无效化 IP 地址,其实就是用
Example
🟢 1108.defanging-an-ip-address
🏷️ Tags
#string
Description
给你一个有效的 IPv4 地址
address,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用
"[.]" 代替了每个 "."。Example
输入:address = "1.1.1.1"
输出:"1[.]1[.]1[.]1"
百度百科
IPv4_百度百科
网际协议版本4(英语:Internet Protocol version 4,IPv4),又称互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署的版本。IPv4是互联网的核心,也是使用最广泛的网际协议版本,其后继版本为IPv6,直到2011年,IANA IPv4位址完全用尽时,IPv6仍处在部署的初期。IPv4在IETF于1981年9月发布的 RFC 791 中被描述,此RFC替换了于1980年1月发布的 RFC 760。IPv4是一种无连接的协议,操作在使用分组交换…
Leetcode-cn.com 2022-06-22
🟡 513.find-bottom-left-tree-value
🏷️ Tags
#tree #depth_first_search #breadth_first_search #binary_tree
Description
给定一个二叉树的 根节点
假设二叉树中至少有一个节点。
Example
🟡 513.find-bottom-left-tree-value
🏷️ Tags
#tree #depth_first_search #breadth_first_search #binary_tree
Description
给定一个二叉树的 根节点
root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。
Example
输入: root = [2,1,3]
输出: 1
Leetcode-cn.com 2022-06-23
🔴 30.substring-with-concatenation-of-all-words
🏷️ Tags
#hash_table #string #sliding_window
Description
给定一个字符串
注意子串要与
Example
🔴 30.substring-with-concatenation-of-all-words
🏷️ Tags
#hash_table #string #sliding_window
Description
给定一个字符串
s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与
words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。Example
输入:s = "barfoothefoobarman", words = ["foo","bar"]
输出:[0,9]
解释:
从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。
输出的顺序不重要, [9,0] 也是有效答案。
Leetcode-cn.com 2022-06-24
🟡 515.find-largest-value-in-each-tree-row
🏷️ Tags
#tree #depth_first_search #breadth_first_search #binary_tree
Description
给定一棵二叉树的根节点
Example
🟡 515.find-largest-value-in-each-tree-row
🏷️ Tags
#tree #depth_first_search #breadth_first_search #binary_tree
Description
给定一棵二叉树的根节点
root ,请找出该二叉树中每一层的最大值。Example
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
Leetcode-cn.com 2022-06-25
🟡 剑指 Offer II 091.JEj789
🏷️ Tags
#array #dynamic_programming
Description
假如有一排房子,共
当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个
例如,
请计算出粉刷完所有房子最少的花费成本。
Example
🟡 剑指 Offer II 091.JEj789
🏷️ Tags
#array #dynamic_programming
Description
假如有一排房子,共
n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个
n x 3 的正整数矩阵 costs 来表示的。例如,
costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请计算出粉刷完所有房子最少的花费成本。
Example
输入: costs = [[17,2,17],[16,16,5],[14,3,19]]
输出: 10
解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。
最少花费: 2 + 5 + 3 = 10。
Leetcode-cn.com 2022-06-26
🔴 710.random-pick-with-blacklist
🏷️ Tags
#hash_table #math #binary_search #sorting #randomized
Description
给定一个整数
优化你的算法,使它最小化调用语言 内置 随机函数的次数。
实现
Example
🔴 710.random-pick-with-blacklist
🏷️ Tags
#hash_table #math #binary_search #sorting #randomized
Description
给定一个整数
n 和一个 无重复 黑名单整数数组 blacklist 。设计一种算法,从 [0, n - 1] 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。任何在上述范围内且不在黑名单 blacklist 中的整数都应该有 同等的可能性 被返回。优化你的算法,使它最小化调用语言 内置 随机函数的次数。
实现
Solution 类:Solution(int n, int[] blacklist) 初始化整数 n 和被加入黑名单 blacklist 的整数int pick() 返回一个范围为 [0, n - 1] 且不在黑名单 blacklist 中的随机整数Example
输入
["Solution", "pick", "pick", "pick", "pick", "pick", "pick", "pick"]
[[7, [2, 3, 5]], [], [], [], [], [], [], []]
输出
[null, 0, 4, 1, 6, 1, 0, 4]
解释
Solution solution = new Solution(7, [2, 3, 5]);
solution.pick(); // 返回0,任何[0,1,4,6]的整数都可以。注意,对于每一个pick的调用,
// 0、1、4和6的返回概率必须相等(即概率为1/4)。
solution.pick(); // 返回 4
solution.pick(); // 返回 1
solution.pick(); // 返回 6
solution.pick(); // 返回 1
solution.pick(); // 返回 0
solution.pick(); // 返回 4
Leetcode-cn.com 2022-06-30
🟢 1175.prime-arrangements
🏷️ Tags
#math
Description
请你帮忙给从
让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。
由于答案可能会很大,所以请你返回答案 模 mod
Example
🟢 1175.prime-arrangements
🏷️ Tags
#math
Description
请你帮忙给从
1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。
由于答案可能会很大,所以请你返回答案 模 mod
10^9 + 7 之后的结果即可。Example
输入:n = 5
输出:12
解释:举个例子,[1,2,5,4,3] 是一个有效的排列,但 [5,2,3,4,1] 不是,因为在第二种情况里质数 5 被错误地放在索引为 1 的位置上。
Leetcode-cn.com 2022-07-01
🟡 241.different-ways-to-add-parentheses
🏷️ Tags
#recursion #memoization #math #string #dynamic_programming
Description
给你一个由数字和运算符组成的字符串
生成的测试用例满足其对应输出值符合 32 位整数范围,不同结果的数量不超过
Example
🟡 241.different-ways-to-add-parentheses
🏷️ Tags
#recursion #memoization #math #string #dynamic_programming
Description
给你一个由数字和运算符组成的字符串
expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以 按任意顺序 返回答案。生成的测试用例满足其对应输出值符合 32 位整数范围,不同结果的数量不超过
104 。Example
输入:expression = "2-1-1"
输出:[0,2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
Leetcode-cn.com 2022-07-02
🔴 871.minimum-number-of-refueling-stops
🏷️ Tags
#greedy #array #dynamic_programming #heap_priority_queue
Description
汽车从起点出发驶向目的地,该目的地位于出发位置东面
沿途有加油站,每个
假设汽车油箱的容量是无限的,其中最初有
当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。
为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回
注意:如果汽车到达加油站时剩余燃料为 0,它仍然可以在那里加油。如果汽车到达目的地时剩余燃料为 0,仍然认为它已经到达目的地。
Example
🔴 871.minimum-number-of-refueling-stops
🏷️ Tags
#greedy #array #dynamic_programming #heap_priority_queue
Description
汽车从起点出发驶向目的地,该目的地位于出发位置东面
target 英里处。沿途有加油站,每个
station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。假设汽车油箱的容量是无限的,其中最初有
startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。
为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回
-1 。注意:如果汽车到达加油站时剩余燃料为 0,它仍然可以在那里加油。如果汽车到达目的地时剩余燃料为 0,仍然认为它已经到达目的地。
Example
输入:target = 1, startFuel = 1, stations = []
输出:0
解释:我们可以在不加油的情况下到达目的地。
Leetcode-cn.com 2022-07-03
🟡 556.next-greater-element-iii
🏷️ Tags
#math #two_pointers #string
Description
给你一个正整数
注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回
Example
🟡 556.next-greater-element-iii
🏷️ Tags
#math #two_pointers #string
Description
给你一个正整数
n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回
-1 。Example
输入:n = 12
输出:21
Leetcode-cn.com 2022-07-04
🟢 1200.minimum-absolute-difference
🏷️ Tags
#array #sorting
Description
给你个整数数组
请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
Example
🟢 1200.minimum-absolute-difference
🏷️ Tags
#array #sorting
Description
给你个整数数组
arr,其中每个元素都 不相同。请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
Example
输入:arr = [4,2,1,3]
输出:[[1,2],[2,3],[3,4]]
Leetcode-cn.com 2022-07-05
🟡 729.my-calendar-i
🏷️ Tags
#design #segment_tree #binary_search #ordered_set
Description
实现一个
当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订 。
日程可以用一对整数
实现
Example
🟡 729.my-calendar-i
🏷️ Tags
#design #segment_tree #binary_search #ordered_set
Description
实现一个
MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订 。
日程可以用一对整数
start 和 end 表示,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end 。实现
MyCalendar 类:MyCalendar() 初始化日历对象。boolean book(int start, int end) 如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true 。否则,返回 false 并且不要将该日程安排添加到日历中。Example
输入:
["MyCalendar", "book", "book", "book"]
[[], [10, 20], [15, 25], [20, 30]]
输出:
[null, true, false, true]
解释:
MyCalendar myCalendar = new MyCalendar();
myCalendar.book(10, 20); // return True
myCalendar.book(15, 25); // return False ,这个日程安排不能添加到日历中,因为时间 15 已经被另一个日程安排预订了。
myCalendar.book(20, 30); // return True ,这个日程安排可以添加到日历中,因为第一个日程安排预订的每个时间都小于 20 ,且不包含时间 20 。