博客
关于我
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/

    你可能感兴趣的文章
    Python2 安装MySQLdb库
    查看>>
    Python2 已终结,入手Python 3,你需要这30个技巧
    查看>>
    python写下拉列表在excel,无法使用python获取Excel下拉列表(组合框)值
    查看>>
    python2.7安装
    查看>>
    Python2.7安装ncmbot时提示:Microsoft Visual C++9.0 is required
    查看>>
    PYTHON2.Git.1
    查看>>
    python20181211
    查看>>
    Python内存管理机制
    查看>>
    Python2中range 和xrange的区别??
    查看>>
    python2和3的区别
    查看>>
    python2和python3的pip版本升级
    查看>>
    python2和python3的区别
    查看>>
    python2备份交换机配置脚本
    查看>>
    Python3 - 在字符串格式化程序参数中使用变量
    查看>>
    Python3 A*寻路算法实现
    查看>>
    python3 grpc安装
    查看>>
    python3 mysql 封装多表_python3 mysql-多表查询
    查看>>
    python3 mysql8_Python MySQL8.0 错误:authentication plugin 'calling_sha2_password' is not supported....
    查看>>
    Python关键代码总览!从Zero到Hero必看的考点
    查看>>
    python3 robotframework+pycharm框架搭建
    查看>>