当前位置: 首页 > wzjs >正文

中医协会网站建设方案凡科网免费做网站

中医协会网站建设方案,凡科网免费做网站,WordPress 软件 模板,网站建设又叫什么软件好的!让我们详细解释 LeetCode 1524. 和为奇数的子数组数目 这道题的思路和解法。 题目: https://leetcode.cn/problems/number-of-sub-arrays-with-odd-sum/description/ 题目分析 问题描述: 给定一个整数数组 arr,返回其中和…

好的!让我们详细解释 LeetCode 1524. 和为奇数的子数组数目 这道题的思路和解法。

题目: https://leetcode.cn/problems/number-of-sub-arrays-with-odd-sum/description/

题目分析

问题描述
给定一个整数数组 arr,返回其中和为奇数的子数组的数目。由于答案可能很大,结果需对 10^9 + 7 取余。

示例
输入:arr = [1, 3, 5]
输出:4
解释:

  • 子数组 [1][3][5] 的和均为奇数。
  • 子数组 [1, 3, 5] 的和为 1 + 3 + 5 = 9,也是奇数。

暴力解法(超时)

思路
枚举所有子数组,计算每个子数组的和并判断奇偶性。

代码

class Solution {
public:int numOfSubarrays(vector<int>& arr) {const int MOD = 1e9 + 7;int count = 0;int n = arr.size();for (int i = 0; i < n; i++) {int sum = 0;for (int j = i; j < n; j++) {sum += arr[j];if (sum % 2 == 1) {count = (count + 1) % MOD;}}}return count;}
};

复杂度

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)

优化解法:前缀和 + 奇偶计数

核心思路

  1. 前缀和的奇偶性:子数组 [i, j] 的和为 prefix[j+1] - prefix[i],其中 prefix[k] 表示前 k 个元素的和。
  2. 奇偶性规律:若 prefix[j+1]prefix[i] 的奇偶性不同,则子数组和为奇数。
  3. 哈希表统计:动态维护前缀和为奇数和偶数的次数,遍历数组时累加符合条件的子数组数目。

代码

class Solution {
public:int numOfSubarrays(vector<int>& arr) {const int MOD = 1e9 + 7;int count = 0;int prefix = 0;      // 当前前缀和int odd = 0;         // 前缀和为奇数的次数int even = 1;        // 前缀和为偶数的次数(初始包含前缀和为0的情况)for (int num : arr) {prefix += num;if (prefix % 2 == 0) {// 当前前缀和为偶数,加上之前前缀和为奇数的次数count = (count + odd) % MOD;even++;} else {// 当前前缀和为奇数,加上之前前缀和为偶数的次数count = (count + even) % MOD;odd++;}}return count;}
};

复杂度

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

详细解释

  1. 前缀和的奇偶性
    对于子数组 [i, j],其和为 prefix[j+1] - prefix[i]

    • prefix[j+1] 为偶数,prefix[i] 为奇数,则和为奇数。
    • prefix[j+1] 为奇数,prefix[i] 为偶数,则和为奇数。
  2. 动态维护奇偶次数

    • odd:记录遍历到当前位置时,前缀和为奇数的次数。
    • even:记录遍历到当前位置时,前缀和为偶数的次数。
    • 初始值even = 1,因为空数组的前缀和为 0(偶数)。
  3. 累加结果

    • 若当前前缀和为偶数,则它可以与之前所有奇数前缀和形成有效子数组,累加 odd
    • 若当前前缀和为奇数,则它可以与之前所有偶数前缀和形成有效子数组,累加 even

示例验证

输入:arr = [1, 3, 5]
步骤如下:

  1. 初始状态prefix = 0odd = 0even = 1count = 0
  2. 处理 1prefix = 1(奇数),count += even = 1odd = 1even = 1
  3. 处理 3prefix = 4(偶数),count += odd = 1 + 1 = 2odd = 1even = 2
  4. 处理 5prefix = 9(奇数),count += even = 2 + 2 = 4odd = 2even = 2

最终结果:4,与预期一致。

总结

通过前缀和的奇偶性分析和动态计数,我们将时间复杂度从 O(n²) 优化到 O(n),空间复杂度为 O(1)。这种方法适用于所有类似的“子数组和满足某种奇偶性条件”的问题,核心在于利用前缀和的奇偶性快速查找配对。


文章转载自:

http://sonQr0MF.fgsqz.cn
http://QG0FjWEq.fgsqz.cn
http://cmeIYpsj.fgsqz.cn
http://HbSqhV8W.fgsqz.cn
http://3Qk9F71l.fgsqz.cn
http://00H8gS7H.fgsqz.cn
http://zgRI28EK.fgsqz.cn
http://pcCA0qxl.fgsqz.cn
http://hwP9mJw2.fgsqz.cn
http://S2wFxsUJ.fgsqz.cn
http://nvtlo0Dg.fgsqz.cn
http://slohm8ty.fgsqz.cn
http://MMLO8HFc.fgsqz.cn
http://EPrAcNip.fgsqz.cn
http://2iqFxWmk.fgsqz.cn
http://Pf1DoQN8.fgsqz.cn
http://CEv5uu7r.fgsqz.cn
http://kJTEPJqm.fgsqz.cn
http://TAUeTXPe.fgsqz.cn
http://YRdyMyc2.fgsqz.cn
http://ec6e0mmM.fgsqz.cn
http://O832Exyf.fgsqz.cn
http://lWDUB9mw.fgsqz.cn
http://TMyUvp9q.fgsqz.cn
http://omdWFfXO.fgsqz.cn
http://Sz0lY0H6.fgsqz.cn
http://2Nrq2xKy.fgsqz.cn
http://NtFrlxSx.fgsqz.cn
http://1B5puhSf.fgsqz.cn
http://jdXTIhlE.fgsqz.cn
http://www.dtcms.com/wzjs/646911.html

相关文章:

  • 网站公司logo设计打开百度官网
  • 长春建站模板制作上海备案证查询网站查询网站查询
  • 网站建设案例分享有了域名 做网站
  • 政务信息化建设网站app开发公司联系方式
  • 专业建站推广服务wordpress xml文件分割器
  • 读取别人网站代码自己做营销型网站的概念
  • 阿里云域名如何做网站网站免费的正能量漫画
  • 长沙免费模板建站西安咪豆网站建设公司
  • 网站开发及建设天津建设招标网站
  • 专业做阿里巴巴网站的公司wordpress 网站死机
  • 湛江市网站建设网站的html代码在哪
  • 设计师个人网站建设wordpress d8主题
  • 淘宝客怎么做网站网站建设方案书 模板
  • 网站的建设包括以下几个阶段有做足球裁判跑动数据的网站吗
  • 固定在网站底部做查询快递单号的网站多少钱
  • 游戏是怎么做的视频网站网站未被百度中收录的原因
  • 做设计去哪个网站找素材上海仿站定制模板建站
  • 哪些网站做推广效果好怎样建设简单的网站
  • 安徽省卫生计生网站医共体建设提升wordpress访问速度
  • 做网站的专业网站建设行业swot分析
  • 家电网站建设费用杭州经济技术开发区建设局网站
  • 建筑材料价格查询网站代理网络app
  • 企业所得税税率表2022年狼雨seo培训
  • 响应式布局网站模板国家再就业免费培训网
  • php做网站界面代码佛山营销网站建设联系方式
  • 公司想建个网站怎么弄网站建设365
  • 给网站添加后台包工头如何找工程项目
  • 网站logo上传小程序开发平台好牌子推荐
  • 苏州吴中区专业做网站南京做企业号微网站营销
  • 成都 做网站wordpress付费插件网站