接外包,有相关需求的可以联系我:Telegram | Email

560. 和为 K 的子数组

该文章创建(更新)于02/16/2022,请注意文章的时效性!

Description

给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。

CODE

  • Time Limit Exceeded
class Solution:
    def subarraySum(self, nums, k: int) -> int:

        self.preNums = [0]
        count = 0
        for i in range(len(nums)):
            print(i)
            self.preNums.append(self.preNums[i] + nums[i])

        print(self.preNums)

        for  i in range(len(self.preNums)):
            j = i
            while j < len(self.preNums) - 1:
                print('i' + str(i) + '\tj' + str(j))
                print(self.preNums[j+1] - self.preNums[i])
                if (self.preNums[j+1] - self.preNums[i]) == k:
                    count += 1
                j += 1

        print("####################")
        return count


s = Solution()
nums = [1,-1,1,-1]
print("#####################")
print(s.subarraySum(nums,0))
  • Accepted

和为k,数量字典创建位置不通为啥结果不一样?

class SolutionTwo:
    def subarraySum(self, nums, k: int) -> int:

        self.preNums = [0]
        count = 0
        for i in range(len(nums)):
            self.preNums.append(self.preNums[i] + nums[i])

        print(self.preNums)

        preDict = {}


        for j in self.preNums:
            # 为啥不能放到这儿?
            # preDict[j] = preDict.get(j,0) + 1
            # print(preDict)

            print("需要寻找的数" + str(j - k))

            # 用dict类是为了避免有重复值情况的发生,避免遗漏统计
            # 如果前面有这个前缀和,则直接更新答案
            if j - k in preDict:
                # count += preDict.get(j - k)
                print("preDict的数量:" + str(preDict[j - k]))
                count += preDict[j - k]
                print(count)
                # print(count)

            # 为啥只能放到这儿?
            preDict[j] = preDict.get(j,0) + 1
            print(preDict)

            print("####################")
        return count


s = SolutionTwo()
nums = [1,-1,1,-1]
print("#####################")
print(s.subarraySum(nums,0))



👇 Share | 分享 👇


要不赞赏一下?

微信
支付宝
PayPal
Bitcoin

版权声明 | Copyright

除非特别说明,本博客所有作品均采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明转自-
https://www.emperinter.info/2022/02/16/subarray-sum-equals-k/


要不聊聊?

我相信你准备留下的内容是经过思考的!【勾选防爬虫,未勾选无法留言】

*

*



微信公众号

👉 NewsLetter ❤️ 邮箱订阅 👈

优惠码


阿里云国际版20美元
Vultr10美元
搬瓦工 | Bandwagon应该有折扣吧?
域名 | namesiloemperinter(1美元)