【Leetcode Daily】2602使数组元素全部相等的最少操作次数
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:347|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给两个数组,现在规定一次操作为对数组一的任意元素进行加一或者减一,对数组二的每个元素,求将数组一的全部数字经多次操作后,全部变成该元素的操作次数。
思路分享
有关距离和的基本思路,可以查看 【Leetcode Daily】1685有序数组中差绝对值之和
本题与此前的距离和模板题有一点不同,由于不确定要对哪个下标的数字做距离和,需要二分查找找到下标再开始求解,python 中可以通过 bisect 函数来快速找到下标(bisect_left 是求最左,而 bisect_right 求最右)。
由于本题的操作不涉及原始序列,可以排序后再进行操作,这样才能用距离和。如果不能确保单调性,应该是得换个方法的。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-07-18
【Leetcode Daily】1685有序数组中差绝对值之和
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个数组,要求返回其中每一个值与其它所有元素差值的绝对值。 思路分享 前缀和的思路,可以参考 【Leetcode Daily】303区域和检索-数组不可变 从本题,可以学习到运用前缀和,简化一个数字与其左右两边数值之差值求解过程的方法。 https://leetcode.cn/problems/sum-of-absolute-differences-in-a-sorted-array/solutions/3603710/ling-shen-ke-hou-qian-zhui-he-by-zhi-ma-2zjb3/ 比如说,先以 0...

2025-07-19
【Leetcode Daily】2615等值距离和
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个数组,求其中所有数值,各与其相同数值下标之差的绝对值之和。 思路分享 有关距离和的基本思路,可以查看 【Leetcode Daily】1685有序数组中差绝对值之和 本题是求下标之差,所以先要把数值分类,将各自的下标整理成各个数组,然后各数组就能计算其中元素与其它元素的距离和,从而提交答案。 代码解答(强烈建议自行解答后再看) 参考题解 1234567891011121314class Solution: def distance(self, nums: List[int]) -> List[int]: groups = defaultdict(list) for i, x in enumerate(nums): groups[x].append(i) ans = [0]*len(nums) for a in groups.values(): n = len(a) s =...

2025-04-14
【Leetcode Daily】1534统计好三元组
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个数组,要求统计其中所有满足要求三元组的数量。该要求是,两两之差,满足题目的三个数字。 思路分享 首先就是暴力解法,O(n^3),不过陆爻齐在普通的暴力上做了一点点剪枝,但终究还是暴力。 想要比较好的完成本题,就需要学习前缀和,总体的思路是固定三元组中的两个,通过要求来求得剩下一个值的范围,将该范围在前缀和中搜寻,符合则找到合适的三元组。 https://leetcode.cn/problems/count-good-triplets/?envType=daily-question&envId=2025-04-14 代码解答(强烈建议自行解答后再看) 陆爻齐小改良的暴力解法 12345678910111213141516171819class Solution {public: int countGoodTriplets(vector<int>& arr, int a, int b, int c) { int size =...

2025-05-29
【Leetcode Daily】930和相同的二元子数组
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整数数组和目标整数 goal,求子数组和恰好为 goal 的子数组数量。 思路分享 这是“恰好型滑动窗口”,本质上就是两个越长越合法的窗口结果之差。 实现有两个方式,一个是单独把滑动窗口划分一个函数,调用两次,求结果之差;另一个是只设置一次滑动窗口,不过要同时维护两个左指针,计算结果是直接累计数值之差。 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415161718192021// 恰好型滑动窗口class Solution {public: int numSubarraysWithSum(vector<int>& nums, int goal) { int left1 = 0, left2 = 0, ans = 0; int sum1 = 0, sum2 = 0; int goal1 = goal, goal2 = goal+1; for (int right =...

2025-06-04
【Leetcode Daily】2389和有限的最长子序列
题目浅析 想查看原题可以点击题目链接。 简单地说,就是求一个数组的每个值,与另一个数组子序列和的关系,在子序列和不超过这个值的前提下,求最长子序列的长度。 思路分享 前缀和+二分 https://leetcode.cn/problems/longest-subsequence-with-limited-sum/solutions/1781111/fei-bao-li-zuo-fa-qian-zhui-he-er-fen-by-ny4m/ 为了使得子序列长度越长,要尽可能选取数值较小的元素。所以先排序,然后用前缀和得到各个子序列的和。 具体实现中,前缀和用 numeric 库的 partial_sum 实现,而二分就直接用 ranges 库的 upper_bound 函数,之所以不用 lower_bound 是因为本题要求“不超过”,而非小于。当然,用加一值的lower_cound也行。 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112class Solution {public: ...

2025-06-30
【Leetcode Daily】303区域和检索-数组不可变
题目浅析 想查看原题可以点击题目链接。 简单地说,就是要求实现一个类,这个类能够返回数组中任意一个闭区间的数值和。 思路分享 这是前缀和的模板题,所谓前缀和的计算,正如其名,就是把数组从左往右一个个数值累加并记录。 https://leetcode.cn/problems/range-sum-query-immutable/solutions/2693498/qian-zhui-he-ji-qi-kuo-zhan-fu-ti-dan-py-vaar/ 实现方式很简单,但是有一点需要特别注意,就是留出第一位的 0.如果采用第一位就放第一位的数值,那么就需要特别处理闭区间左部为 0 的情况,但是如果第一位置零,第二位放第一个数值,第三位放前两个数值,这样子下去,取区间和就只要调整一下下标加一即可。 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516class NumArray: def __init__(self, nums: List[int]): s = [0] * (len(nums)+1) ...
公告
不定时更新,记录所学所想
系列文章