leetcode contest 379
前三题可能就是简单题目, t4
构造题目确实比较难
100170. 对角线最长的矩形的面积
给你一个下标从 0 开始的二维整数数组 dimensions
。
对于所有下标 i
(0 <= i < dimensions.length
),dimensions[i][0]
表示矩形 i
的长度,而 dimensions[i][1]
表示矩形 i
的宽度。
返回对角线最 长 的矩形的 面积 。如果存在多个对角线长度相同的矩形,返回面积最 大 的矩形的面积。
示例 1:
输入:dimensions = [[9,3],[8,6]] |
示例 2:
输入:dimensions = [[3,4],[4,3]] |
提示:
1 <= dimensions.length <= 100
dimensions[i].length == 2
1 <= dimensions[i][0], dimensions[i][1] <= 100
地址
https://leetcode.cn/contest/weekly-contest-379/problems/maximum-area-of-longest-diagonal-rectangle/
题意
直接模拟即可
思路
- 这接找到对角线最长,且面积最大的矩形返回面积即可。
- 复杂度分析:
- 时间复杂度:$O(n)$,其中 $n$ 表示给定数组的长度。
- 空间复杂度:$O(1)$。
代码
class Solution: |
100187. 捕获黑皇后需要的最少移动次数
现有一个下标从 0 开始的 8 x 8
棋盘,上面有 3
枚棋子。
给你 6
个整数 a
、b
、c
、d
、e
和 f
,其中:
(a, b)
表示白色车的位置。(c, d)
表示白色象的位置。(e, f)
表示黑皇后的位置。
假定你只能移动白色棋子,返回捕获黑皇后所需的最少移动次数。
请注意:
- 车可以向垂直或水平方向移动任意数量的格子,但不能跳过其他棋子。
- 象可以沿对角线方向移动任意数量的格子,但不能跳过其他棋子。
- 如果车或象能移向皇后所在的格子,则认为它们可以捕获皇后。
- 皇后不能移动。
示例 1:
输入:a = 1, b = 1, c = 8, d = 8, e = 2, f = 3 |
示例 2:
输入:a = 5, b = 3, c = 3, d = 4, e = 5, f = 2 |
提示:
1 <= a, b, c, d, e, f <= 8
- 两枚棋子不会同时出现在同一个格子上。
地址
https://leetcode.cn/contest/weekly-contest-379/problems/minimum-moves-to-capture-the-queen/
题意
构造题目
思路
- 仔细分析一下,车或者象到皇后的移动次数最多为 $2$ 次,最少为 $1$ 次,我们找到移动次数为 $1$ 次,剩余返回 $2$ 即可,仔细分析有以下几种情况为 $1$:
- 车与皇后在一条直线上,此时象要么不在一条直线上,要么不在二者之间,此时需要满足 :
- $$a = e, c \neq a $$;
- $$a = e, c = a, d \notin [\min(b,f), \max(b,f)]$$;
- $$b = f, d \neq b $$;
- $$a = e, d = b, c \notin [\min(a,e), \max(a,e)]$$;
- 象与皇后在一条直线上,此时车要么不在一条直线上,要么不在二者之间,此时需要满足;
- $|c - e| = |b - f|, (c - e)\times(b - f) \neq (a - e)\times(d - f)$;
- $|c - e| = |b - f|, (c - e)\times(b - f) = (a - e)\times(d - f), a\notin[\min(c,e), max(c,e)]$;
- 车与皇后在一条直线上,此时象要么不在一条直线上,要么不在二者之间,此时需要满足 :
- 复杂度分析:
- 时间复杂度:$O(1)$;
- 空间复杂度:$O(1)$;
代码
class Solution: |
100150. 移除后集合的最多元素数
给你两个下标从 0
开始的整数数组 nums1
和 nums2
,它们的长度都是偶数 n
。
你必须从 nums1
中移除 n / 2
个元素,同时从 nums2
中也移除 n / 2
个元素。移除之后,你将 nums1
和 nums2
中剩下的元素插入到集合 s
中。
返回集合 s
可能的 最多 包含多少元素。
示例 1:
输入:nums1 = [1,2,1,2], nums2 = [1,1,1,1] |
示例 2:
输入:nums1 = [1,2,3,4,5,6], nums2 = [2,3,2,3,2,3] |
示例 3:
输入:nums1 = [1,1,2,2,3,3], nums2 = [4,4,5,5,6,6] |
提示:
n == nums1.length == nums2.length
1 <= n <= 2 * 104
n
是偶数。1 <= nums1[i], nums2[i] <= 109
地址
https://leetcode.cn/contest/weekly-contest-379/problems/maximum-size-of-a-set-after-removals/
题意
构造题目
思路
题目看起来有一些意思,但实际也是一个构造题目,由于题目要求构造出现不同的元素尽可能的多,我们需要将数组中的元素分为三类:
- 只出现在数组 $1$ 的元素,且不出现在数组 $2$ 中的元素数目为 $c_1$;
- 只出现在数组 $2$ 的元素,且不出现在数组 $1$ 中的元素数目为 $c_2$;
- 同时出现在数组 $1$ 与数组 $2$ 中的元素数目为 $c$;
根据以上分析,假设两个数组合并,最多只能有 $c_1 + c_2 + c$ 个元素,我们从数组中挑出 $\frac{n}{2}$ 个,从数组 $2$ 中挑出 $\frac{n}{2}$ 个;
根据 $1$ 的分析,我们首先尽量选择出现在 $1$ 个数组中的元素,此时数组 $1$ 中先选择 $x = \min(c_1,\frac{n}{2})$ 个元素,数组 $2$ 中先选择 $y = \min(c_2,\frac{n}{2})$ 个元素,剩余不足 $n$ 个的元素只能从 $c$ 中选择,因此最多的数目即为 $\min(x + y + c, n)$ 个元素;
复杂度分析:
- 时间复杂度:$O(n)$,其中 $n$ 表示给定的数组的长度。
- 空间复杂度:$O(n)$,其中 $n$ 表示给定的数组的长度。
代码
class Solution: |
100154. 执行操作后的最大分割数量
给你一个下标从 0 开始的字符串 s
和一个整数 k
。
你需要执行以下分割操作,直到字符串 s
变为 空:
- 选择
s
的最长前缀,该前缀最多包含k
个 不同 字符。 - 删除 这个前缀,并将分割数量加一。如果有剩余字符,它们在
s
中保持原来的顺序。
执行操作之 前 ,你可以将 s
中 至多一处 下标的对应字符更改为另一个小写英文字母。
在最优选择情形下改变至多一处下标对应字符后,用整数表示并返回操作结束时得到的最大分割数量。
示例 1:
输入:s = "accca", k = 2 |
示例 2:
输入:s = "aabaab", k = 3 |
示例 3:
输入:s = "xxyz", k = 1 |
提示:
1 <= s.length <= 104
s
只包含小写英文字母。1 <= k <= 26
地址
题意
暴力
思路
确实没有想到太好的办法,就直接暴力枚举所有可能的状态,直接设 $dp[i][mask][flag][cnt]$ 表示当前能够获得的最大分割量,其中 $i$ 表示当前索引,$mask$ 表示当前数组末尾的二进制压缩,$flag$ 表示当前是否使用操作,$cnt$ 表示当前的状态。暴力检测即可。看了官方题解,给的方法也不太好。
复杂度分析:
- 时间复杂度:$O(Cn)$,其中 $n$ 表示给定的字符串的长度;
- 空间复杂度:$O(2^C \times n)$,其中 $n$ 表示给定的字符串的长度;
代码
class Solution: |
欢迎关注和打赏,感谢支持!
扫描二维码,分享此文章