首页 > 编程语言 > 详细

523.连续的子数组和

时间:2020-05-14 12:47:28      阅读:60      评论:0      收藏:0      [点我收藏+]

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

示例 1:

输入: [23,2,4,6,7], k = 6
输出: True
解释: [2,4] 是一个大小为 2 的子数组,并且和为 6。

示例 2:

输入: [23,2,6,4,7], k = 6
输出: True
解释: [23,2,6,4,7]是大小为 5 的子数组,并且和为 42。

说明:

  1. 数组的长度不会超过10,000。
  2. 你可以认为所有数字总和在 32 位有符号整数范围内。

解题

1.数学题,前缀方式解决
"""
记录每个下标的模运算值,到下一个元素时当前元素+上一个模结果再取模保存,也就是(a)%k, ((a)%k+b)%k, (((a)%k+b)%k+c)%k,  ((((a)%k+b)%k+c)%k... + n)%k
当前位置的元素计算完模之后要是结果跟前面所保存的模的值一样,就把前面下标位置之前的元素都剔除,剩下元素模结果就是0,所以剩下元素数量大于等于2时就满足了要求。
"""

hashmap = {}
sums = 0
hashmap[0] = -1 #为了第一个元素取模=0时候判断字数组大于2;if i-hashmap[sums] > 1| 0-(-1)=1
for i in range(len(nums)):
    sums+=nums[i]
    sums = sums%k
    if sums in hashmap:
        if i-hashmap[sums] > 1: # 判断之前保存的模结果下标距离是否比当前下标为>1
            print(nums[hashmap[sums]+1:i+1])
    else:
        hashmap[sums] = i


523.连续的子数组和

原文:https://www.cnblogs.com/hornets/p/12887558.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!