博客
关于我
leetcode------523. 连续的子数组和[1]
阅读量:186 次
发布时间:2019-02-28

本文共 1653 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要判断给定数组中是否存在至少两个连续的子数组,其和为目标整数 k 的倍数。我们可以通过前缀和和模运算来高效地解决这个问题。

方法思路

  • 特殊情况处理:当目标整数 k 为 0 时,我们需要检查数组中是否存在连续的两个 0,因为只有这样,子数组的和才能为 0。
  • 前缀和和模运算:对于非零的 k,我们可以使用前缀和数组来记录每个位置的和,并使用模运算来记录每个前缀和对 k 取模的结果。这样,当我们发现两个前缀和对 k 取模后的结果相同时,说明它们之间的子数组和是 k 的倍数。
  • 解决代码

    #include 
    #include
    using namespace std;class Solution {public: bool checkSubarraySum(vector
    & nums, int k) { int n = nums.size(); if (n < 2) return false; // 子数组至少需要2个元素 if (k == 0) { // 检查是否存在连续的两个0 for (int i = 0; i < n - 1; ++i) { if (nums[i] == 0 && nums[i + 1] == 0) { return true; } } return false; } else { vector
    prefix(n + 1, 0); for (int i = 1; i <= n; ++i) { prefix[i] = prefix[i - 1] + nums[i - 1]; } unordered_map
    seen; seen[prefix[0] % k] = 0; for (int j = 1; j <= n; ++j) { int current_mod = prefix[j] % k; if (seen.find(current_mod) != seen.end()) { int i = seen[current_mod]; if (i <= j - 2) { return true; } } seen[current_mod] = j; } return false; } }};

    代码解释

  • 特殊情况处理:当 k 为 0 时,遍历数组检查是否有连续的两个 0。如果有,返回 true,否则返回 false。
  • 前缀和计算:计算前缀和数组 prefix,其中 prefix[i] 表示数组前 i 个元素的和。
  • 模运算记录:使用一个哈希表 seen 记录每个前缀和对 k 取模后的值及其对应的索引。当发现相同的模值时,检查索引是否满足子数组长度至少为 2 的条件,如果满足,返回 true。
  • 遍历检查:遍历前缀和数组,更新模值记录,直到找到符合条件的子数组或遍历结束。
  • 这种方法的时间复杂度为 O(n),适用于较大的数组长度。

    转载地址:http://vnki.baihongyu.com/

    你可能感兴趣的文章
    python argparse模块
    查看>>
    Python asyncio库的学习和使用
    查看>>
    Python AttributeError:“dict“对象没有属性“append“
    查看>>
    Python base64和hashlib模块
    查看>>
    python basic programs
    查看>>
    python bert_gen.py 报错Unable to load weights from pytorch checkpoint file for......
    查看>>
    python binascii.Error: Incorrect padding
    查看>>
    Python bool() 函数能否为无效参数引发异常?
    查看>>
    Python C 程序子进程在“for line in iter“处挂起
    查看>>
    Python Celery:自动化测试平台定时任务必备的三方库
    查看>>
    python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令
    查看>>
    Python CONNECT 4 CHECK WIN函数
    查看>>
    python cos,Python cos(90)和cos(270)不是0
    查看>>
    python进阶(4):Python 脚本文件重启自身进程
    查看>>
    python ctypes库中动态链接库加载方式
    查看>>
    python cv2 图像( np array )转 HObject
    查看>>
    python进阶(3):文件操作
    查看>>
    python cv2截取不规则区域图片
    查看>>
    python CV2裁剪图片并保存
    查看>>
    python进阶(2):pyecharts使用
    查看>>