获得徽章 7
- #刷题交流#
day27: 小R的蛋糕分享
解题思路:
1. 美味度的总和: 首先计算整个矩阵的美味度之和 total_sum。这个值是固定的,之后通过切割正方形来让两部分的美味度尽量接近。
2. 选择子矩阵: 要在矩阵中选择一个正方形区域,假设该正方形区域的大小为 k x k(其中 k 是正方形的边长),位置可以是任意的。切割后的两部分分别是正方形区域内的美味度和正方形区域外的美味度。
3. 计算区域和: 为了高效计算任意正方形子矩阵的和,可以使用前缀和(Prefix Sum)。前缀和数组 prefix_sum[i][j] 表示从 (0, 0) 到 (i-1, j-1) 范围内所有元素的总和。这样可以通过前缀和快速计算任意正方形区域的和。
4. 美味度差的计算: 假设选定的正方形区域的美味度和为 s1,那么剩余部分的美味度和为 s2 = total_sum - s1。目标是使得 |s1 - s2| 尽量小,即最小化 |2 * s1 - total_sum|。
解毕.展开评论点赞 - #刷题交流#
day26: 石子移动问题
解题思路:
1. 端点石子:端点石子指的是在数轴上最小值和最大值的位置上的石子。在每次操作中,可以选择将一个端点石子移动到一个未占用的位置,移除它的端点身份。
2. 连续性:石子最终需要变得连续,也就是说,石子的位置应该没有空隙。目标是通过最多的次数使石子的位置变得连续。
3. 移动次数的最大化:需要找到尽可能多的可移动次数。移动次数的限制是由石子的位置的差距决定的——比如,如果最小位置和最大位置之间有5个空隙,那么最多可以进行5次移动。
解毕.展开评论点赞 - #刷题交流#
day25: 小R的城市稳定性挑战
解题思路:
1. 排序:首先对城市人口进行排序,确保按人口从小到大排列。
2.查找不稳定的城市:然后检查相邻的城市。如果当前城市的人口超过了前一个城市人口的两倍,说明它们不稳定,至少需要调整其中一个城市。
3.计数:每次发现不稳定的情况,就增加修改次数。
解毕.展开评论点赞 - #刷题交流#
day24: 小C的排列询问
解题思路:
1. 找到 x 和 y 的索引位置:在列表 a 中找到元素 x 和 y 分别出现的位置。
2. 判断是否相邻:如果它们的索引差的绝对值为 1,则表示它们是相邻的。
解毕.展开赞过评论1 - #刷题交流#
day23: 小C点菜问题
解题思路:
1. 筛选菜品价格:首先要选择价格不超过 m 的菜。因此需要筛选出所有价格小于等于 m 的菜。
2. 计算最大数量:然后,对于筛选后的菜品,统计每种菜的数量,找出出现次数最多的价格对应的菜的数量,这个值就是小C最多可以点的菜的数量。
解毕.展开评论点赞 - #刷题交流#
day22: 小M的订单编号问题
解题思路:
1. 假设有一个订单序号 x 和编号上限 m,那么每当 x 大于 m 时,编号会从 1 重新开始。
2. 计算第 x 个订单的编号,其实就是求 x % m 的结果。如果余数为 0,说明编号是 m,否则编号就是余数。
解毕.展开评论点赞 - #刷题交流#
day21: 迷人子序列计数问题
解题思路:
1. 滑动窗口(双指针法): 使用滑动窗口的方式,保持一个有效的窗口,其中窗口内的元素的最大值和最小值之差不超过给定的阈值 k。通过动态地扩展和收缩窗口,可以高效地计算所有满足条件的子序列数量。
2. 核心思路:
(1)使用两个指针 left 和 right 来表示当前子序列的左右边界。
(2)遍历 right 从左到右,扩大窗口。
(3)当窗口内的元素的最大值和最小值之差超过 k 时,移动 left 指针,收缩窗口,直到满足条件。
(4)在每一步,计算当前有效的子序列数量。对于每个 right,当前有效的子序列个数为 right - left + 1。
3. 使用 max_queue 和 min_queue 来维护当前窗口的最大值和最小值。这里可以利用双端队列(deque)来实现高效的最大值和最小值查询。
解毕.展开评论点赞 - #刷题交流#
day20: 小E的射击训练
解题思路
1. 计算射击点与靶心的距离:x**2 + y**2。
2. 判断距离所在的环数,根据环数来确定得分。如果距离小于等于某个半径,则得分为 11-i。
3. 如果距离大于 10,则得分为 0。
解毕.展开评论点赞 - #刷题交流#
day19: 贪心猫的鱼干大分配
解题思路:
1. 初始化每只猫的鱼干分配,初始值为1。
2. 从左到右遍历:确保每只猫的鱼干数满足比左边等级低的猫多。
3. 从右到左遍历:确保每只猫的鱼干数满足比右边等级低的猫多,同时取两次分配中的较大值。
4. 返回鱼干总数。
解毕.展开评论点赞 - #刷题交流#
day18: 统计班级中的说谎者
1. 使用 Python 内置的 sorted 函数对输入的成绩列表 A 进行排序,得到 sorted_A,排序后的列表方便后续查找和比较不同成绩的相对位置以及数量关系。
2. 对于 sorted_A 中的每个成绩 current_score(通过 for 循环遍历),需要统计出成绩小于等于它的数量以及大于它的数量来判断是否说谎。
3. 采用二分查找(通过 while 循环实现)在 sorted_A 中查找与当前成绩 current_score 相等的成绩。找到相等成绩后,通过两个 while 循环向左右两边扩展,统计出所有与当前成绩相等的成绩数量 equal_count。
4. 根据二分查找结束后的左指针 left 以及统计出的相等成绩数量 equal_count,可以计算出成绩小于等于当前成绩的数量 less_or_equal_count(其值为 left + equal_count - 1,因为 left 指向的是第一个大于当前成绩的位置,所以小于等于当前成绩的位置数量要减去 1 并加上相等成绩的数量),而大于当前成绩的数量 greater_count 就是总学生数量 n 减去 less_or_equal_count。
5. 如果 less_or_equal_count 大于 greater_count,说明当前成绩对应的学生满足说谎条件,此时将与当前成绩相等的学生数量 equal_count 累加到结果 result 中,因为所有这些成绩相同的学生都会说谎。
解毕.展开评论点赞