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

    你可能感兴趣的文章
    oracle存储参数(storage子句)含义及设置技巧
    查看>>
    Oracle学习
    查看>>
    ui 图片素材网站
    查看>>
    Oracle学习总结(10)——45 个非常有用的 Oracle 查询语句
    查看>>
    Oracle学习总结(2)——Oracle数据库设计总结(三大范式)
    查看>>
    Oracle学习总结(3)——Navicat客户端连接Oracle数据库常见问题汇总
    查看>>
    Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全
    查看>>
    Oracle学习总结(5)—— SQL语句经典案例
    查看>>
    Oracle学习总结(6)—— SQL注入技术
    查看>>
    Oracle学习总结(7)—— 常用的数据库索引优化语句总结
    查看>>
    Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则
    查看>>
    Oracle学习总结(9)—— Oracle 常用的基本操作
    查看>>
    oracle学习笔记《二》
    查看>>
    oracle学习笔记(4)
    查看>>
    Oracle学习第二天---Profile的使用
    查看>>
    Oracle学习第五课
    查看>>
    Oracle安全攻防,你可能不知道自己一直在裸奔
    查看>>
    Oracle安装、Navicat for Oracle、JDBCl连接、获取表结构
    查看>>
    Oracle安装与远程连接配置(附Oracle安装包)
    查看>>
    Oracle官方推荐的性能测试工具!简单、精准又直观!
    查看>>