题目描述:
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:
- The length of the array won't exceed 10,000.
- You may assume the sum of all the numbers is in the range of a signed 32-bit integer.
题目大意:
求数组nums中是否存在k的整数倍,并且长度至少为2的连续子段和。
注意:
- 数组长度不超过10,000。
- 可以假设所有数字的和范围在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/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。
123 发布于 2017年2月26日 14:34 #
楼主,[5, 6, 4], 6 这个样例,能过么
在线疯狂 发布于 2017年2月26日 16:50 #
不能通过,感谢提醒!代码有BUG,已经更正。 :)
1234 发布于 2017年2月27日 09:46 #
k=0, %k,会不会报divide 0 error?
在线疯狂 发布于 2017年2月27日 10:57 #
m = total % k if k else total 当k为0的时候返回total,否则返回total % k