[Leetcode学习]Subarray Sum Equals K(和为K连续子序列)

问题:

难度:medium

说明:

给一个数组,求出里面连续子序列和为K的子序列个数,连续子序列就是相当于集合真子集,而且顺序连续的意思。输入数组长度[1, 20,000],数组元素值范围 [-1000, 1000] ,K值[-1e7, 1e7](科学记数法)

输入案例:

// 下标 1 2 和为2,下表 2 3 和为2,所以统计为2,两个连续子序列
Input:nums = [1,1,1], k = 2
Output: 2

我的代码:

这个略折腾,幸好之前有借鉴的题目 Contiguous Array。

设置count为统计值,

首先每次相加结果得出sum,

然后map.get (sum-k) 和count相加(因为如果sum随着遍历一直和元素相加,如果之前每出现一次map中已存放的 sumX == (sum - K) ,可以认为从sumX 之后的子序列和为K。)

把每次sum都存到map里面,设置出现次数为 map.get(sum)+ 1(因为可能出现多次相同的sum)

public class SubarraySumEqualsK {
    public static void main(String[] args) {
        Solution solution = new SubarraySumEqualsK().new Solution();
        // 被坑的测试数据
        int[] arr = new int[]{1,2,3,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值