美文网首页
DAY5 子数组和为目标倍数

DAY5 子数组和为目标倍数

作者: 神游物外的轮子 | 来源:发表于2020-05-10 10:58 被阅读0次

523. Continuous Subarray Sum

要求连续子数组和为目标数字的倍数

解法一

遍历所有可能的子数组O(n^2)

解法二

任意连续子数组的和都可以使用从0开始的两个子数组相减得到
使用上面的结论,可以依次记录从0开始的子数组和摸目标数字的余数,需要注意的是:

  1. 除余0以外,余数相同的两个子数组相减,即得到需要的连续子数组;
  2. 子数组长度需要大于1;
  3. 余0是唯一可以前两个元素相加符合要求的,需要补充d=\{0: -1\}这个条件
class Solution:
    def checkSubarraySum(self, nums: List[int], k: int) -> bool:
        if len(nums) <= 1:
            return False
        
        d = {0: -1}
        s = 0
        for i in range(len(nums)):
            s += nums[i]
            if k != 0:
                s = s % k
            if s in d:
                if i - d[s] > 1:
                    return True
            else:
                d[s] = i
                
        return False

相关文章

  • DAY5 子数组和为目标倍数

    523. Continuous Subarray Sum 要求连续子数组和为目标数字的倍数 解法一 遍历所有可能的...

  • 算法「两数之和」

    题目:给出数组nums和目标值target,找出和为目标值的两个数在数组中 想法:定义数组和目标值,遍历数组x使得...

  • 【数组】--零子数组、最大连续子数组、数字连续子数组

    零子数组:对于长度为N的数组,求连续子数组和和最接近0的值和子数组最大连续子数组:给定一个数组A,求A的连续子数组...

  • 前缀和

    560.和为K的子数组 算出一共有几个和为 k 的子数组。这里用到了前缀和数组。 注意以下几点: 前缀和数组第0号...

  • LeetCode 862. 和至少为 K 的最短子数组

    返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 。如果没有和至少为 K 的非空子数组,返回 -1。...

  • 美团点评2018机器学习岗位-编程题目

    本次考试有两道编程题目。 题目描述(1) 给定一个数组A和一个数k,求A的子数组的和是k的倍数的最长子串的长度。数...

  • leetcode 560. 和为K的子数组

    560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 ...

  • 6、查找目标组合

    给定第一个数组和目标结果,找出数组中和为目标结果的组合

  • 560.和为K的子数组

    和为K的子数组 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1...

  • 连续的子数组和

    给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,...

网友评论

      本文标题:DAY5 子数组和为目标倍数

      本文链接:https://www.haomeiwen.com/subject/gdgdnhtx.html