LeetCode560.和为k的子数组

这道题我用的是暴力法,当然也是不断的提交不断发现问题改出来的,比如我之前是算到和大于目标值就break,其实不行因为后面还可以有负数,我把break删了。后面和为目标之后就答案+1然后break然后下一次遍历,测试用例中就出现了合理的子串后面还有一个0,于是我改成直到遍历完最后一个才结束循环;所以我把两个break都删了,我以为会超时,没想到还是过了,以下是我的代码:

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
       int ans =0;
       int n = nums.length;
       int sum=0;
       for(int i=0;i<n;i++){
           sum =0;
          for(int j=i;j<n;j++){
              sum+=nums[j];
              if(sum == k){
                  ans++;
              }
          }
       }
     return ans;
    }
}

就是最简单的暴力法,用i,j两个指针作为子串的起点和终点,然后把子串的所有数的和加起来,如何等于k,ans++。这里就需要注意我前面提到的无论sum=k还是sum>k都不能break,要遍历到最后一个数自动结束,外层循环每次sum归0。

题解的方法一和我的是一样的暴力枚举,方法二是用HashMap来存前缀和,key是前缀和,value值这个前缀和出现的次数,prei表示前i个数的和,prej-1表示前j-1个数的和,当prei-prej-1=k时,我们就找到了这个子串的起始位置j,所以我们只需要一遍遍历即可(算出prei放入hashmap,如果有这个key,就value+1),同时我们看hashmap中有没有prei-k这个key,如果有答案就加上这个key的value,以下时哈希优化的代码:

java 复制代码
public class Solution {
    public int subarraySum(int[] nums, int k) {
        int count = 0, pre = 0;
        HashMap < Integer, Integer > mp = new HashMap < > ();
        mp.put(0, 1);
        for (int i = 0; i < nums.length; i++) {
            pre += nums[i];
            if (mp.containsKey(pre - k)) {
                count += mp.get(pre - k);
            }
            mp.put(pre, mp.getOrDefault(pre, 0) + 1);
        }
        return count;
    }
}
相关推荐
深海呐4 小时前
Java 位运算符的实际应用:不止面试刷题,业务同样能用
java·位运算符·java 位运算·java 开发技巧·状态位设计·java 高阶用法·位运算符实战
2602_959960924 小时前
电商场景Java面试:Spring Boot、JVM、Redis、Kafka、微服务与分布式事务考点解析——谢飞机的作死面试记
java·jvm·spring boot·redis·面试题
路多辛4 小时前
一个 Go 写的全能 AI Agent,讲讲 covo-agent
java·开发语言·golang
杨丰玮4184 小时前
从零手写Java飞机躲障碍游戏|Swing绘图、鼠标跟随、计时器碰撞检测实战(四)
java·游戏·计算机外设
阿沐沐,4 小时前
PowerShell 里改了 config.toml,Codex CLI 仍用旧值:先分清该改哪一层
java·服务器·数据库·人工智能·ai·ai编程
杨丰玮4184 小时前
从零手写Java飞机躲障碍游戏|Swing绘图、鼠标跟随、计时器碰撞检测实战(二)
java·游戏·计算机外设
Rain的Java大神之路4 小时前
如何避免订单重复提交
java·redis·后端·面试·架构·rabbitmq·rocketmq
茜茜数模4 小时前
2026年天府杯大学生数学建模A题全套资源
人工智能·算法·机器学习
PhotonixBay4 小时前
从粗糙度到三维形貌:激光共聚焦显微镜实现微米级表面分析
图像处理·人工智能·测试工具·算法
2401_862880825 小时前
数据结构 --- 算法
数据结构·算法