[LeetCode]Continuous Subarray Sum

题目描述:

LeetCode 523. Continuous Subarray Sum

Given a list of non-negative numbers and a target integer k, write a function to check if the array has a continuous subarray of size at least 2 that sums up to the multiple of k, that is, sums up to n*k where n is also an integer.

Example 1:

Input: [23, 2, 4, 6, 7],  k=6
Output: True
Explanation: Because [2, 4] is a continuous subarray of size 2 and sums up to 6.

Example 2:

Input: [23, 2, 6, 4, 7],  k=6
Output: True
Explanation: Because [23, 2, 6, 4, 7] is an continuous subarray of size 5 and sums up to 42.

Note:

  1. The length of the array won't exceed 10,000.
  2. You may assume the sum of all the numbers is in the range of a signed 32-bit integer.

题目大意:

求数组nums中是否存在k的整数倍,并且长度至少为2的连续子段和。

注意:

  1. 数组长度不超过10,000。
  2. 可以假设所有数字的和范围在32位带符号整数之内。

解题思路:

遍历数组nums,求前i项和total;对k取模,记模值为m

利用dmap[m]记录模为m的前i项和的最小下标,初始令dmap[0] = -1

若dmap[m] + 1 < i,则返回True

Python代码:

class Solution(object):
    def checkSubarraySum(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: bool
        """
        dmap = {0 : -1}
        total = 0
        for i, n in enumerate(nums):
            total += n
            m = total % k if k else total
            if m not in dmap: dmap[m] = i
            elif dmap[m] + 1 < i: return True
        return False

 

本文链接:http://bookshadow.com/weblog/2017/02/26/leetcode-continuous-subarray-sum/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码

Pingbacks已关闭。

评论
  1. 123 123 发布于 2017年2月26日 14:34 #

    楼主,[5, 6, 4], 6 这个样例,能过么

  2. 在线疯狂 在线疯狂 发布于 2017年2月26日 16:50 #

    不能通过,感谢提醒!代码有BUG,已经更正。 :)

  3. 1234 1234 发布于 2017年2月27日 09:46 #

    k=0, %k,会不会报divide 0 error?

  4. 在线疯狂 在线疯狂 发布于 2017年2月27日 10:57 #

    m = total % k if k else total 当k为0的时候返回total,否则返回total % k

张贴您的评论