每日算法-250602

每日算法学习记录 - 250602

今天学习和复习了两道利用前缀和与哈希表解决的子数组问题,特此记录。

560. 和为 K 的子数组

题目

LeetCode Problem 560 Screenshot

思路

本题的核心思想是利用 前缀和哈希表 来优化查找过程。

解题过程

题目要求统计和为 k 的子数组个数。

  1. 我们首先预处理出一个前缀和数组 prefix,其中 prefix[i] 表示原数组 nums 中区间 [0, i-1] 的元素之和。特别地,prefix[0] = 0
  2. 对于任意子数组 nums[i...j-1] (假设 j > i),其和可以表示为 prefix[j] - prefix[i]
  3. 我们目标是找到满足 prefix[j] - prefix[i] = k(i, j) 对的个数。
  4. 将上式变形,得到 prefix[i] = prefix[j] - k
  5. 我们可以遍历计算出的 prefix 数组(从 prefix[0]prefix[n],其中 nnums 的长度)。当遍历到 prefix[j](在代码中用变量 x 表示)时,我们希望在 之前已经遇到过 的前缀和中查找是否存在一个 prefix[i],使得 prefix[i] == prefix[j] - k
  6. 使用一个哈希表 map 来存储已经遍历过的前缀和 sum_val 及其出现的次数 count (即 map<sum_val, count>)。
  7. 当我们遍历 prefix 数组,对于当前的元素 x (它代表一个 prefix[j])

这样,通过一次遍历,我们就能统计出所有和为 k 的子数组数量。

复杂度

  • 时间复杂度: O ( N ) O(N) O(N),其中 N N N 是数组 nums 的长度。计算前缀和数组需要 O ( N ) O(N) O(N),遍历前缀和数组并操作哈希表(插入和查找平均 O ( 1 ) O(1) O(1))也需要 O ( N ) O(N) O(N)
  • 空间复杂度: O ( N ) O(N) O(N),主要用于存储前缀和数组和哈希表。在最坏情况下,哈希表可能存储 N + 1 N+1 N+1 个不同的前缀和。

Code

class Solution {public int subarraySum(int[] nums, int k) {int ret = 0, n = nums.length;int[] prefix = new int[n + 1];Map<Integer, Integer> map = new HashMap<>(n + 1);for (int i = 0; i < n; i++) {prefix[i + 1] = prefix[i] + nums[i];}for (int x : prefix) {int key = x - k;ret += map.getOrDefault(key, 0);map.put(x, map.getOrDefault(x, 0) + 1);}return ret;}
}

930. 和相同的二元子数组(复习)

题目

LeetCode Problem 930 Screenshot

说明

这道题是复习题。之前使用过滑动窗口的解法(可参考 每日算法-250404),本次采用与上一题 (560. 和为 K 的子数组) 类似的 前缀和 + 哈希表 思路。

由于解题逻辑与上一题高度一致(只是目标和从 k 变成了 goal),这里不再赘述详细过程,仅列出代码实现。核心都是计算前缀和,然后查找 current_prefix_sum - goal 是否在哈希表中出现过。

代码

class Solution {public int numSubarraysWithSum(int[] nums, int goal) {int ret = 0, n = nums.length;int[] prefixSum = new int[n + 1];Map<Integer, Integer> map = new HashMap<>(n + 1);for (int i = 0; i < n; i++) {prefixSum[i + 1] = prefixSum[i] + nums[i];}for (int x : prefixSum) {int key = x - goal;ret += map.getOrDefault(key, 0);map.put(x, map.getOrDefault(x, 0) + 1);}return ret;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arch安装botw-save-state

devkitPro https://blog.csdn.net/qq_39942341/article/details/148387077?spm1001.2014.3001.5501 cargo https://blog.csdn.net/qq_39942341/article/details/148387783?spm1001.2014.3001.5501 megaton https://blog.csdn.net/qq_39942341/article/details/148388164?spm…

STM32学习笔记---时钟树

目录 一、时钟树&#xff1a;M3---STM32F103 1、主要时钟来源 ​2、时钟系统线路分析 HSE时钟 HSI时钟 LSE时钟 LSI时钟 PPLCLK ---锁相环时钟 SYSCLK ---系统时钟 HCLK时钟 PCLK1时钟 PCLK2时钟 3、时钟树简图 4、构成部分作用分析 二、时钟树&#xff1a;M4-…

35.x64汇编写法(二)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;34.x64汇编写法&#xff08;一&#xff09; 上一个内容写了&#xff0c;汇编调…

钩子函数的作用(register_hook)

钩子函数仅在backward()时才会触发。其中&#xff0c;钩子函数接受梯度作为输入&#xff0c;返回操作后的梯度&#xff0c;操作后的梯度必须要输入的梯度同类型、同形状&#xff0c;否则报错。 主要功能包括&#xff1a; 监控当前的梯度&#xff08;不返回值&#xff09;&…

【头歌实验】Keras机器翻译实战

【头歌实验】Keras机器翻译实战 第1关&#xff1a;加载原始数据 编程要求 根据提示&#xff0c;在右侧编辑器补充代码&#xff0c;实现load_data函数&#xff0c;该函数需要加载path所代表的文件中的数据&#xff0c;并将文件中所有的内容按\n分割&#xff0c;转换成一个列表…

python中使用高并发分布式队列库celery的那些坑

python中使用高并发分布式队列库celery的那些坑 &#x1f31f; 简单理解&#x1f6e0;️ 核心功能&#x1f680; 工作机制&#x1f4e6; 示例代码&#xff08;使用 Redis 作为 broker&#xff09;&#x1f517; 常见搭配&#x1f4e6; 我的环境&#x1f4e6;第一个问题&#x1…

截图工具 Snipaste V2.10.7(2025.06.2更新)

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VORklK9hcuoI6n_qgx25jSq2A1?pwde7bi# 【​本章下载二】&#xff1a;https://pan.quark.cn/s/7c62f8f86735 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…

batch_size 参数最优设置

在深度学习训练中,batch_size(批量大小)的选择是一个需要权衡的问题,既不是越大越好,也不是越小越好,而是需要根据硬件资源、数据规模、模型复杂度和优化目标等因素综合决定。以下是详细分析:

【agent开发】部署LLM(一)

本周基本就是在踩坑&#xff0c;没什么实质性的进展 下载模型文件 推荐一个网站&#xff0c;可以简单计算下模型推理需要多大显存&#xff1a;https://apxml.com/tools/vram-calculator 我的显卡是RTX 4070&#xff0c;有12GB的显存&#xff0c;部署一个1.7B的Qwen3应该问题…

大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大模型篇章已经开始&#xff01; 目前已经更新到了第 22 篇&#xff1a;大语言模型 22 - MCP 自动操作 FigmaCursor 自动设计原型 Java篇开…

flutter常用动画

Flutter 动画基础概念 术语解释Animation表示动画的值&#xff0c;通常是一个 double (0.0 ~ 1.0) 或其他数值。AnimationController管理动画的时间进度和状态。需要 Ticker (vsync) 来驱动。Tween定义动画的取值范围&#xff0c;如从 0.0 到 1.0&#xff0c;从红色到蓝色。Cu…

Python打卡DAY43

复习日 作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 我选择ouIntel Image Classification | Kagglezz&#xff0c;该数据集分为六类&#xff0c;包含建筑、森林、冰川、山脉、海洋和街道…

从多巴胺的诱惑到内啡肽的力量 | 个体成长代际教育的成瘾困局与破局之道

注&#xff1a;本文为“多巴胺&#xff0c;内啡肽”相关文章合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 年少偏爱多巴胺&#xff0c;中年才懂内啡肽 摘要 &#xff1a;本文通过生活实例与科学研究相结合的方式…

【音视频】H265 NALU分析

1 H265 概述 H264 与 H265 的区别 传输码率&#xff1a;H264 由于算法优化&#xff0c;可以低于 2Mbps 的速度实现标清数字图像传送&#xff1b;H.265 High Profile 可实现低于 1.5Mbps 的传输带宽下&#xff0c;实现 1080p 全高清视频传输。 编码架构&#xff1a;H.265/HEVC…

Python训练营打卡 Day26

知识点回顾&#xff1a; 函数的定义变量作用域&#xff1a;局部变量和全局变量函数的参数类型&#xff1a;位置参数、默认参数、不定参数传递参数的手段&#xff1a;关键词参数传递参数的顺序&#xff1a;同时出现三种参数类型时 ——————————————————————…

PH热榜 | 2025-05-29

1. Tapflow 2.0 标语&#xff1a;将你的文档转化为可销售的指导手册、操作手册和工作流程。 介绍&#xff1a;Tapflow 2.0将各类知识&#xff08;包括人工智能、设计、开发、营销等&#xff09;转化为有条理且可销售的产品。现在你可以导入文件&#xff0c;让人工智能快速为你…

GitHub 趋势日报 (2025年05月30日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 833 agenticSeek 789 prompt-eng-interactive-tutorial 466 ai-agents-for-beginn…

Cesium 8 ,在 Cesium 上实现雷达动画和车辆动画效果,并控制显示和隐藏

目录 ✨前言 一、功能背景 1.1 核心功能概览 1.2 技术栈与工具 二、车辆动画 2.1 模型坐标 2.2 组合渲染 2.3 显隐状态 2.4 模型文件 三、雷达动画 3.1 创建元素 3.2 动画解析 3.3 坐标联动 3.4 交互事件 四、完整代码 4.1 属性参数 4.2 逻辑代码 加载车辆动画…

相机--相机标定

教程 相机标定分类 相机标定分为内参标定和外参标定。 内参标定 目的 作用 原理 外参标定

JS手写代码篇---手写类型判断函数

9、手写类型判断函数 手写完成这个函数&#xff1a;输入一个对象(value)&#xff0c;返回它的类型 js中的数据类型&#xff1a; 值类型&#xff1a;String、Number、Boolean、Null、Undefied、Symbol引用类型&#xff1a;Object、Array、Function、RegExp、Date 使用typeOf…