当前位置: 首页 > article >正文

前端力扣刷题 | 4:hot100之 子串

560. 和为K的子数组

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

子数组是数组中元素的连续非空序列。

示例:

输入:nums = [1,1,1], k = 2
输出:2

法一:暴力法
var subarraySum = function(nums, k) {
    let res = 0;
    for(let i=0;i<nums.length;i++){
        let sum = 0;
        for(let j = i;j>=0;j--){
            sum+=nums[j];
            if(sum===k){
                res++;
            }
        }
    }
    return res;
};
法二:前缀和+哈希表
  • 使用前缀和存储累计值,利用 currentSum - k 快速找到满足条件的子数组。
function subarraySum(nums, k) {
    // 初始化前缀和计数器
    const prefixSumCount = new Map();
    prefixSumCount.set(0, 1); // 初始前缀和为0,出现次数为1
    let currentSum = 0;
    let result = 0;

    for (const num of nums) {
        // 更新当前前缀和
        currentSum += num;

        // 检查是否存在满足条件的前缀和
        if (prefixSumCount.has(currentSum - k)) {
            result += prefixSumCount.get(currentSum - k);
        }

        // 更新前缀和计数器
        prefixSumCount.set(
            currentSum,
            (prefixSumCount.get(currentSum) || 0) + 1
        );
    }
    return result;
}

http://www.kler.cn/a/522551.html

相关文章:

  • 每日一题-判断是否是平衡二叉树
  • 如何学习Java后端开发
  • 关于低代码技术架构的思考
  • 【数据结构】 并查集 + 路径压缩与按秩合并 python
  • 【PySide6快速入门】QInputDialog输入对话框
  • npm:升级自身时报错:EBADENGINE
  • Mybatis-plus缓存
  • java poi excel 富文本粗体无效
  • 浅谈OceanBase服务名(SERVICE_NAME)
  • GOGOGO 枚举
  • OpenCV:在图像中添加噪声(瑞利、伽马、脉冲、泊松)
  • Java并发学习:进程与线程的区别
  • zyNo.16(笔记web题型)
  • Java进阶(二):Java设计模式
  • 数据结构 栈
  • qt-QtQuick笔记之常见项目类简要介绍
  • 构建一个时间序列分析模型,用于股票市场预测
  • Python 数据清洗与处理常用方法全解析
  • MFC设置透明但不穿透窗体
  • 2023CISCN初赛unzip
  • 【kong gateway】5分钟快速上手kong gateway
  • 【数据结构】_链表经典算法OJ:环形链表的约瑟夫问题
  • 基于 Android 的日程管理系统的设计与实现
  • 状态码对照表
  • 蓝桥杯准备 【入门2】分支结构
  • STM32 EXTI中断配置