Leetcode-cn.com 2021-10-24
🟡 638.shopping-offers
🏷️ Tags
#bit_manipulation #memoization #array #dynamic_programming #backtracking #bitmask
Description
在 LeetCode 商店中, 有
给你一个整数数组
还有一个数组
返回 确切 满足购物清单所需花费的最低价格,你可以充分利用大礼包的优惠活动。你不能购买超出购物清单指定数量的物品,即使那样会降低整体价格。任意大礼包可无限次购买。
Example
🟡 638.shopping-offers
🏷️ Tags
#bit_manipulation #memoization #array #dynamic_programming #backtracking #bitmask
Description
在 LeetCode 商店中, 有
n 件在售的物品。每件物品都有对应的价格。然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。给你一个整数数组
price 表示物品价格,其中 price[i] 是第 i 件物品的价格。另有一个整数数组 needs 表示购物清单,其中 needs[i] 是需要购买第 i 件物品的数量。还有一个数组
special 表示大礼包,special[i] 的长度为 n + 1 ,其中 special[i][j] 表示第 i 个大礼包中内含第 j 件物品的数量,且 special[i][n] (也就是数组中的最后一个整数)为第 i 个大礼包的价格。返回 确切 满足购物清单所需花费的最低价格,你可以充分利用大礼包的优惠活动。你不能购买超出购物清单指定数量的物品,即使那样会降低整体价格。任意大礼包可无限次购买。
Example
输入:price = [2,5], special = [[3,0,5],[1,2,10]], needs = [3,2]
输出:14
解释:有 A 和 B 两种物品,价格分别为 ¥2 和 ¥5 。
大礼包 1 ,你可以以 ¥5 的价格购买 3A 和 0B 。
大礼包 2 ,你可以以 ¥10 的价格购买 1A 和 2B 。
需要购买 3 个 A 和 2 个 B , 所以付 ¥10 购买 1A 和 2B(大礼包 2),以及 ¥4 购买 2A 。
Leetcode-cn.com 2021-10-25
🟡 240.search-a-2d-matrix-ii
🏷️ Tags
#array #binary_search #divide_and_conquer #matrix
Description
编写一个高效的算法来搜索
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
Example
🟡 240.search-a-2d-matrix-ii
🏷️ Tags
#array #binary_search #divide_and_conquer #matrix
Description
编写一个高效的算法来搜索
m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
Example
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
Leetcode-cn.com 2021-10-26
🟢 496.next-greater-element-i
🏷️ Tags
#stack #array #hash_table #monotonic_stack
Description
给你两个 没有重复元素 的数组
请你找出
Example
🟢 496.next-greater-element-i
🏷️ Tags
#stack #array #hash_table #monotonic_stack
Description
给你两个 没有重复元素 的数组
nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出
nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。Example
输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
对于 num1 中的数字 4 ,你无法在第二个数组中找到下一个更大的数字,因此输出 -1 。
对于 num1 中的数字 1 ,第二个数组中数字1右边的下一个较大数字是 3 。
对于 num1 中的数字 2 ,第二个数组中没有下一个更大的数字,因此输出 -1 。
Leetcode-cn.com 2021-10-27
🔴 301.remove-invalid-parentheses
🏷️ Tags
#breadth_first_search #string #backtracking
Description
给你一个由若干括号和字母组成的字符串
返回所有可能的结果。答案可以按 任意顺序 返回。
Example
🔴 301.remove-invalid-parentheses
🏷️ Tags
#breadth_first_search #string #backtracking
Description
给你一个由若干括号和字母组成的字符串
s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。
Example
输入:s = "()())()"
输出:["(())()","()()()"]
Leetcode-cn.com 2021-10-28
🟡 869.reordered-power-of-2
🏷️ Tags
#math #counting #enumeration #sorting
Description
给定正整数
如果我们可以通过上述方式得到 2 的幂,返回
Example
🟡 869.reordered-power-of-2
🏷️ Tags
#math #counting #enumeration #sorting
Description
给定正整数
N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。如果我们可以通过上述方式得到 2 的幂,返回
true;否则,返回 false。Example
输入:1
输出:true
Leetcode-cn.com 2021-10-29
🔴 335.self-crossing
🏷️ Tags
#geometry #array #math
Description
给你一个整数数组
从 X-Y 平面上的点
判断你所经过的路径是否相交。如果相交,返回
Example
🔴 335.self-crossing
🏷️ Tags
#geometry #array #math
Description
给你一个整数数组
distance 。从 X-Y 平面上的点
(0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南移动 distance[2] 米,向东移动 distance[3] 米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。判断你所经过的路径是否相交。如果相交,返回
true ;否则,返回 false 。Example
输入:distance = [2,1,1,2]
输出:true
Leetcode-cn.com 2021-10-30
🟡 260.single-number-iii
🏷️ Tags
#bit_manipulation #array
Description
给定一个整数数组
进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
Example
🟡 260.single-number-iii
🏷️ Tags
#bit_manipulation #array
Description
给定一个整数数组
nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
Example
输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。
Leetcode-cn.com 2021-10-31
🟢 500.keyboard-row
🏷️ Tags
#array #hash_table #string
Description
给你一个字符串数组
美式键盘 中:
第一行由字符
第二行由字符
第三行由字符
Example
🟢 500.keyboard-row
🏷️ Tags
#array #hash_table #string
Description
给你一个字符串数组
words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。美式键盘 中:
第一行由字符
"qwertyuiop" 组成。第二行由字符
"asdfghjkl" 组成。第三行由字符
"zxcvbnm" 组成。Example
输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]
Leetcode-cn.com 2021-11-01
🟢 575.distribute-candies
🏷️ Tags
#array #hash_table
Description
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
Example
🟢 575.distribute-candies
🏷️ Tags
#array #hash_table
Description
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
Example
输入: candies = [1,1,2,2,3,3]
输出: 3
解析: 一共有三种种类的糖果,每一种都有两个。
最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。
Leetcode-cn.com 2021-11-02
🟢 237.delete-node-in-a-linked-list
🏷️ Tags
#linked_list
Description
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点
题目数据保证需要删除的节点 不是末尾节点 。
Example
🟢 237.delete-node-in-a-linked-list
🏷️ Tags
#linked_list
Description
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点
head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。
Example
输入:head = [4,5,1,9], node = 5
输出:[4,1,9]
解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9
Leetcode-cn.com 2021-11-03
🔴 407.trapping-rain-water-ii
🏷️ Tags
#breadth_first_search #array #matrix #heap_priority_queue
Description
给你一个
Example
🔴 407.trapping-rain-water-ii
🏷️ Tags
#breadth_first_search #array #matrix #heap_priority_queue
Description
给你一个
m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。Example
输入: heightMap = [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]]
输出: 4
解释: 下雨后,雨水将会被上图蓝色的方块中。总的接雨水量为1+2+1=4。
Leetcode-cn.com 2021-11-04
🟢 367.valid-perfect-square
🏷️ Tags
#math #binary_search
Description
给定一个 正整数
进阶:不要 使用任何内置的库函数,如
Example
🟢 367.valid-perfect-square
🏷️ Tags
#math #binary_search
Description
给定一个 正整数
num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如
sqrt 。Example
输入:num = 16
输出:true
Leetcode-cn.com 2021-11-05
🟡 1218.longest-arithmetic-subsequence-of-given-difference
🏷️ Tags
#array #hash_table #dynamic_programming
Description
给你一个整数数组
子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从
Example
🟡 1218.longest-arithmetic-subsequence-of-given-difference
🏷️ Tags
#array #hash_table #dynamic_programming
Description
给你一个整数数组
arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从
arr 派生出来的序列。Example
输入:arr = [1,2,3,4], difference = 1
输出:4
解释:最长的等差子序列是 [1,2,3,4]。
Leetcode-cn.com 2021-11-06
🟢 268.missing-number
🏷️ Tags
#bit_manipulation #array #hash_table #math #sorting
Description
给定一个包含
Example
🟢 268.missing-number
🏷️ Tags
#bit_manipulation #array #hash_table #math #sorting
Description
给定一个包含
[0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。Example
输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
Leetcode-cn.com 2021-11-07
🟢 598.range-addition-ii
🏷️ Tags
#array #math
Description
给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。
操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符合 0 <= i < a 以及 0 <= j < b 的元素 M[i][j] 的值都增加 1。
在执行给定的一系列操作后,你需要返回矩阵中含有最大整数的元素个数。
Example
🟢 598.range-addition-ii
🏷️ Tags
#array #math
Description
给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。
操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符合 0 <= i < a 以及 0 <= j < b 的元素 M[i][j] 的值都增加 1。
在执行给定的一系列操作后,你需要返回矩阵中含有最大整数的元素个数。
Example
输入:
m = 3, n = 3
operations = [[2,2],[3,3]]
输出: 4
解释:
初始状态, M =
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
执行完操作 [2,2] 后, M =
[[1, 1, 0],
[1, 1, 0],
[0, 0, 0]]
执行完操作 [3,3] 后, M =
[[2, 2, 1],
[2, 2, 1],
[1, 1, 1]]
M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。
Leetcode-cn.com 2021-11-08
🟡 299.bulls-and-cows
🏷️ Tags
#hash_table #string #counting
Description
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:
写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:
猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls", 公牛),
有多少位属于数字猜对了但是位置不对(称为 "Cows", 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
给你一个秘密数字
提示的格式为
请注意秘密数字和朋友猜测的数字都可能含有重复数字。
Example
🟡 299.bulls-and-cows
🏷️ Tags
#hash_table #string #counting
Description
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:
写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:
猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls", 公牛),
有多少位属于数字猜对了但是位置不对(称为 "Cows", 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
给你一个秘密数字
secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。提示的格式为
"xAyB" ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B 表示奶牛。请注意秘密数字和朋友猜测的数字都可能含有重复数字。
Example
输入: secret = "1807", guess = "7810"
输出: "1A3B"
解释: 数字和位置都对(公牛)用 '|' 连接,数字猜对位置不对(奶牛)的采用斜体加粗标识。
"1807"
|
"7810"
百度百科
猜数字
猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。
Leetcode-cn.com 2021-11-09
🔴 488.zuma-game
🏷️ Tags
#string #backtracking
Description
你正在参与祖玛游戏的一个变种。
在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色
你的目标是 清空 桌面上所有的球。每一回合:
从你手上的彩球中选出 任意一颗 ,然后将其插入桌面上那一排球中:两球之间或这一排球的任一端。
接着,如果有出现 三个或者三个以上 且 颜色相同 的球相连的话,就把它们移除掉。
如果这种移除操作同样导致出现三个或者三个以上且颜色相同的球相连,则可以继续移除这些球,直到不再满足移除条件。
如果桌面上所有球都被移除,则认为你赢得本场游戏。
重复这个过程,直到你赢了游戏或者手中没有更多的球。
给你一个字符串
Example
🔴 488.zuma-game
🏷️ Tags
#string #backtracking
Description
你正在参与祖玛游戏的一个变种。
在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色
'R'、黄色 'Y'、蓝色 'B'、绿色 'G' 或白色 'W' 。你的手中也有一些彩球。你的目标是 清空 桌面上所有的球。每一回合:
从你手上的彩球中选出 任意一颗 ,然后将其插入桌面上那一排球中:两球之间或这一排球的任一端。
接着,如果有出现 三个或者三个以上 且 颜色相同 的球相连的话,就把它们移除掉。
如果这种移除操作同样导致出现三个或者三个以上且颜色相同的球相连,则可以继续移除这些球,直到不再满足移除条件。
如果桌面上所有球都被移除,则认为你赢得本场游戏。
重复这个过程,直到你赢了游戏或者手中没有更多的球。
给你一个字符串
board ,表示桌面上最开始的那排球。另给你一个字符串 hand ,表示手里的彩球。请你按上述操作步骤移除掉桌上所有球,计算并返回所需的 最少 球数。如果不能移除桌上所有的球,返回 -1 。Example
输入:board = "WRRBBW", hand = "RB"
输出:-1
解释:无法移除桌面上的所有球。可以得到的最好局面是:
- 插入一个 'R' ,使桌面变为 WRRRBBW 。WRRRBBW -> WBBW
- 插入一个 'B' ,使桌面变为 WBBBW 。WBBBW -> WW
桌面上还剩着球,没有其他球可以插入。
Leetcode-cn.com 2021-11-10
🟢 495.teemo-attacking
🏷️ Tags
#array #simulation
Description
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。
当提莫攻击艾希,艾希的中毒状态正好持续
正式地讲,提莫在
给你一个 非递减 的整数数组
返回艾希处于中毒状态的 总 秒数。
Example
🟢 495.teemo-attacking
🏷️ Tags
#array #simulation
Description
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。
当提莫攻击艾希,艾希的中毒状态正好持续
duration 秒。正式地讲,提莫在
t 发起发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。给你一个 非递减 的整数数组
timeSeries ,其中 timeSeries[i] 表示提莫在 timeSeries[i] 秒时对艾希发起攻击,以及一个表示中毒持续时间的整数 duration 。返回艾希处于中毒状态的 总 秒数。
Example
输入:timeSeries = [1,4], duration = 2
输出:4
解释:提莫攻击对艾希的影响如下:
- 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。
- 第 4 秒,提莫再次攻击艾希,艾希中毒状态又持续 2 秒,即第 4 秒和第 5 秒。
艾希在第 1、2、4、5 秒处于中毒状态,所以总中毒秒数是 4 。
Leetcode-cn.com 2021-11-11
🔴 629.k-inverse-pairs-array
🏷️ Tags
#dynamic_programming
Description
给出两个整数
逆序对的定义如下:对于数组的第
由于答案可能很大,只需要返回 答案 mod 109 + 7 的值。
Example
🔴 629.k-inverse-pairs-array
🏷️ Tags
#dynamic_programming
Description
给出两个整数
n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。逆序对的定义如下:对于数组的第
i个和第 j个元素,如果满i < j且 a[i] > a[j],则其为一个逆序对;否则不是。由于答案可能很大,只需要返回 答案 mod 109 + 7 的值。
Example
输入: n = 3, k = 0
输出: 1
解释:
只有数组 [1,2,3] 包含了从1到3的整数并且正好拥有 0 个逆序对。
Leetcode-cn.com 2021-11-12
🟡 375.guess-number-higher-or-lower-ii
🏷️ Tags
#math #dynamic_programming #game_theory
Description
我们正在玩一个猜数游戏,游戏规则如下:
我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。
每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。
然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。
undefined
🟡 375.guess-number-higher-or-lower-ii
🏷️ Tags
#math #dynamic_programming #game_theory
Description
我们正在玩一个猜数游戏,游戏规则如下:
我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。
每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。
然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。
undefined