【Leetcode Daily】2588统计美丽子数组数目
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:247|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是可以按照一个规则不断削减数组内的值,问其中有多少个子数组经过这个规则可以削减到全零的情况。
思路分享
前缀和的思路,可以参考 【Leetcode Daily】303区域和检索-数组不可变
这道题由于规则中,涉及到了 2^k,把数字转换成二进制,就会发现,如果满足条件,其实就发现这个子数组的二进制数处理后就变成了 0。本质上就把题目转化为了,找出所有子数组和为零的情况。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-07-09
【Leetcode Daily】1524和为奇数的子数组数目
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整数数组,要求这个数组中所有子数组中和为奇数的数目。 思路分享 前缀和的思路,可以参考 【Leetcode Daily】303区域和检索-数组不可变 虽然是陆爻齐自己思考了出来,但如果没有提前知道是前缀和区域,应该是做不出来的。 回忆解题的过程,就是思考如何快速判定奇数区域时,对做了前缀和了数组观察偶然发现,只要记录此前的奇数和偶数的数目,就能方便地计算现有的数字与此前数字之前区域的和为奇数的数目。 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415class Solution: def numOfSubarrays(self, arr: List[int]) -> int: s = list(accumulate(arr, initial=0)) even_num = 0 odd_num = 0 ans = 0 for i in s: if i%2 == 0: ...

2025-07-10
【Leetcode Daily】974和可被K整除的子数组
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整数数组和一个整数 k,要求其中所有子数组和能被 k 整除的数量。 思路分享 前缀和的思路,可以参考 【Leetcode Daily】303区域和检索-数组不可变 和之前的有些不同,发现有关取模的题目,大多都是判断取模后的内容来判断。前缀和是从下标零开始的一段子数组和,那么如果其中有一段子数组可以被 k 整除,可以写成 (i - j) % k == 0,换句话就是 i % k == j % k,题目也就转换成了找前缀和中,有多少组取模后的值相同的经典枚举情况。 https://leetcode.cn/problems/subarray-sums-divisible-by-k/solutions/22267/he-ke-bei-kzheng-chu-de-zi-shu-zu-by-lenn123/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910class Solution: def subarraysDivByK(self, nums:...

2025-07-11
【Leetcode Daily】523连续的子数组和
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整数数组和整数 K,求其中是否存在长度至少为二且数值和为 K 的倍数的子数组。 思路分享 前缀和的思路,可以参考 【Leetcode Daily】303区域和检索-数组不可变 这道题和 【Leetcode Daily】974和可被K整除的子数组 相近,或者说这种什么整除,取模啥的,得列下式子,然后发现找子数组总和其实就是前缀和的两侧对 K 取模值相同即可,因为这样子两个值相减所得中间数组和就正好能被 K 整除,也就是 K 的倍数了。 https://leetcode.cn/problems/continuous-subarray-sum/solutions/3714798/ling-shen-ti-dan-qian-zhui-he-ha-xi-biao-oif8/ 代码解答(强烈建议自行解答后再看) 参考题解 1234567891011121314151617class Solution: def checkSubarraySum(self, nums: List[int], k: int)...

2025-07-13
【Leetcode Daily】437路径总和III
题目浅析 想查看原题可以点击题目链接。 简单地说,给了一个二叉树,求其中子链的数值和为 targetSum 的数目。子链的定义是二叉树中任意父节点到其子节点的节点链。 思路分享 前缀和的思路,可以参考 【Leetcode Daily】303区域和检索-数组不可变 这个题挺有意思的,通过这道题能够积累到有这么一种思路:可以通过类似二叉树的前序遍历,同时用哈希表记录前缀和。遍历的本质就是枚举子链的重点,这样就能清晰地看到每个有目标和值的子链。 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass...

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-04-11
【Leetcode Daily】2843统计对称整数的数目
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个范围,统计这其中所有的对称整数的数目,对称整数要求有 2*n 位,n是整数,而且前n位数字之和与后n位数字之和相等。 思路分享 首先是普通的枚举法,毕竟本题是 easy,数字范围不大,暴力即可 ac。不过如何优雅简洁地暴力也是一门学问,如果是陆爻齐原来的想法,很可能会通过逐位模十来获取位数,但实际上处理数位用字符串更合适,结合上 reduce 函数可以间接地求得数位和,就有了下面的枚举写法。 接下来使用数位 dp 就可以解决当数字范围大时候的问题,但安排紧张,就先这样罢,要是能有时间把灵山的慢慢过就好力。 代码解答(强烈建议自行解答后再看) 枚举法 12345678910111213class Solution {public: int countSymmetricIntegers(int low, int high) { int result = 0; for (int i = low; i < high+1; i++) { ...
公告
不定时更新,记录所学所想
系列文章