1827. 最少操作使数组递增
# 1827. 最少操作使数组递增
class Solution {public: int minOperations(vector<int>& nums) { int ans = 0; for (int i = 1; i < nums.size(); i++) { ans += max(0, nums[i - 1] + 1 - nums[i]); nums[i] = max(nums[i], nums[i - 1] + 1); } return ans; }};
复杂度分析
时间复杂度:$O (n)$
空间复杂度:$O (1)$
1691. 堆叠长方体的最大高度
# 1691. 堆叠长方体的最大高度
class Solution {public: int maxHeight(vector<vector<int>>& cuboids) { int n = cuboids.size(); for (auto & v : cuboids) { sort(v.begin(), v.end()); } sort(cuboids.begin(), cuboids.end(), [](const vector<int> & a,const vector<int> & b) { return a[0] + a[1] + a[2] < b[0] + b[1] + b[2]; }); int ans = 0; vector<int> dp(n); f ...
1780. 判断一个数字是否可以表示成三的幂的和
# 1780. 判断一个数字是否可以表示成三的幂的和
class Solution {public: bool checkPowersOfThree(int n) { int flag = 16; while (n) { for (int i = flag - 1; i >= 0; i--) { if (pow(3, i) <= n) { n -= pow(3, i); flag = i; break; } } if (flag == 0) break; } return n == 0; }};
复杂度分析:
时间复杂度:$O (n)$
空间复杂度:$O (1)$
1812. 判断国际象棋棋盘中一个格子的颜色
# 1812. 判断国际象棋棋盘中一个格子的颜色
class Solution {public: bool squareIsWhite(string c) { return (c[0] - 'a' + c[1] - '1') % 2; }};
复杂度分析
时间复杂度:$O (1)$
空间复杂度:$O (1)$
1775. 通过最少操作次数使数组的和相等
# 1775. 通过最少操作次数使数组的和相等
给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。
每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。
请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。如果无法使两个数组的和相等,请返回 -1 。
示例 1:
输入:nums1 = [1,2,3,4,5,6], nums2 = [1,1,2,2,2,2]输出:3解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等。以下数组下标都从 0 开始。- 将 nums2[0] 变为 6 。 nums1 = [1,2,3,4,5,6], nums2 = [6,1,2,2,2,2] 。- 将 nums1[5] 变为 1 。 nums1 = [1,2,3,4,5,1], nums2 = [6,1,2,2,2,2] 。- 将 nums1[2] 变为 2 。 nums1 = [1,2,2,4,5,1], ...
1805. 字符串中不同整数的数目
# 1805. 字符串中不同整数的数目
给你一个字符串 word ,该字符串由数字和小写英文字母组成。
请你用空格替换每个不是数字的字符。例如,“a123bc34d8ef34” 将会变成 "123 34 8 34" 。注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):“123”、“34”、“8” 和 “34” 。
返回对 word 完成替换后形成的 不同 整数的数目。
只有当两个整数的 不含前导零 的十进制表示不同, 才认为这两个整数也不同。
示例 1:
输入:word = "a123bc34d8ef34"输出:3解释:不同的整数有 "123"、"34" 和 "8" 。注意,"34" 只计数一次。
示例 2:
输入:word = "leet1234code234"输出:2
示例 3:
输入:word = "a1b01c001"输出:1解释:"1"、"01" 和 "001& ...
1687. 从仓库到码头运输箱子
# 1687. 从仓库到码头运输箱子
你有一辆货运卡车,你需要用这一辆车把一些箱子从仓库运送到码头。这辆卡车每次运输有 箱子数目的限制 和 总重量的限制 。
给你一个箱子数组 boxes 和三个整数 portsCount, maxBoxes 和 maxWeight ,其中 boxes [i] = [portsi, weighti] 。
portsi 表示第 i 个箱子需要送达的码头, weightsi 是第 i 个箱子的重量。
portsCount 是码头的数目。
maxBoxes 和 maxWeight 分别是卡车每趟运输箱子数目和重量的限制。
箱子需要按照 数组顺序 运输,同时每次运输需要遵循以下步骤:
卡车从 boxes 队列中按顺序取出若干个箱子,但不能违反 maxBoxes 和 maxWeight 限制。
对于在卡车上的箱子,我们需要 按顺序 处理它们,卡车会通过 一趟行程 将最前面的箱子送到目的地码头并卸货。如果卡车已经在对应的码头,那么不需要 额外行程 ,箱子也会立马被卸货。
卡车上所有箱子都被卸货后,卡车需要 一趟行程 回到仓库,从箱子队列里再取出一些箱 ...
1774. 最接近目标价格的甜点成本
# 1774. 最接近目标价格的甜点成本
你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则:
必须选择 一种 冰激凌基料。
可以添加 一种或多种 配料,也可以不添加任何配料。
每种类型的配料 最多两份 。
给你以下三个输入:
baseCosts ,一个长度为 n 的整数数组,其中每个 baseCosts [i] 表示第 i 种冰激凌基料的价格。
toppingCosts,一个长度为 m 的整数数组,其中每个 toppingCosts [i] 表示 一份 第 i 种冰激凌配料的价格。
target ,一个整数,表示你制作甜点的目标价格。
你希望自己做的甜点总成本尽可能接近目标价格 target 。
返回最接近 target 的甜点成本。如果有多种方案,返回 成本相对较低 的一种。
示例 1:
输入:baseCosts = [1,7], toppingCosts = [3,4], target = 10输出:10解释:考虑下面的方案组合(所有下标均从 0 开始):- 选择 1 号基料:成本 7- 选择 1 份 0 号配 ...
1796. 字符串中第二大的数字
# 1796. 字符串中第二大的数字
给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。
混合字符串 由小写英文字母和数字组成。
示例 1:
输入:s = "dfa12321afd"输出:2解释:出现在 s 中的数字包括 [1, 2, 3] 。第二大的数字是 2 。
示例 2:
输入:s = "abc1111"输出:-1解释:出现在 s 中的数字只包含 [1] 。没有第二大的数字。
提示:
1 <= s.length <= 500
s 只包含小写英文字母和(或)数字。
# 题解
class Solution {public: int secondHighest(string s) { deque<int> ans; for (int i = 0; i < s.length(); i++) { if (s[i] >= '0' && s[i ...
1769. 移动所有球到每个盒子所需的最小操作数
# 1769. 移动所有球到每个盒子所需的最小操作数
有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes [i] 的值为 ‘0’ 表示第 i 个盒子是 空 的,而 boxes [i] 的值为 ‘1’ 表示盒子里有 一个 小球。
在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。第 i 个盒子和第 j 个盒子相邻需满足 abs (i - j) == 1 。注意,操作执行后,某些盒子中可能会存在不止一个小球。
返回一个长度为 n 的数组 answer ,其中 answer [i] 是将所有小球移动到第 i 个盒子所需的 最小 操作数。
每个 answer [i] 都需要根据盒子的 初始状态 进行计算。
示例 1:
输入:boxes = "110"输出:[1,1,3]解释:每个盒子对应的最小操作数如下:1) 第 1 个盒子:将一个小球从第 2 个盒子移动到第 1 个盒子,需要 1 步操作。2) 第 2 个盒子:将一个小球从第 1 个盒子移动到第 2 个盒子,需要 1 步操作。3) 第 3 个盒子:将一个小球从第 1 个 ...