力扣 | 560. 和为 K 的子数组

在这里插入图片描述

import java.util.HashMap;
import java.util.Map;public class _560_subarray_sum_equals_k {/* leetcode 560 号算法题:和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。输入:nums = [1,1,1], k = 2输出: 2输入:nums = [0,1,-1,1,1,2], k = 0输出: 4- 数组的长度为 [1, 20,000]。- 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。*/public int subarraySum(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();map.put(0, 1);int prefixSum = 0;int res = 0;for (int i = 0; i < nums.length; i++) {prefixSum += nums[i];int diff = prefixSum - k;// 哈希查找if (map.containsKey(diff)) {res += map.get(diff);}map.put(prefixSum, map.getOrDefault(prefixSum, 0) + 1);}return res;}// 前缀和 + 哈希查找public int subarraySum3(int[] nums, int k) {int[] prefixSum = new int[nums.length + 1];prefixSum[0] = 0;for (int i = 1; i <= nums.length; i++) {prefixSum[i] = prefixSum[i - 1] + nums[i -1];}Map<Integer, Integer> map = new HashMap<>();int res = 0;for (int i = 0; i < prefixSum.length; i++) {int diff = prefixSum[i] - k;// 哈希查找if (map.containsKey(diff)) {res += map.get(diff);}map.put(prefixSum[i], map.getOrDefault(prefixSum[i], 0) + 1);}return res;}// 前缀和 + 线性查找public int subarraySum2(int[] nums, int k) {int[] prefixSum = new int[nums.length + 1];prefixSum[0] = 0;for (int i = 1; i <= nums.length; i++) {prefixSum[i] = prefixSum[i - 1] + nums[i -1];}int res = 0;for (int i = 0; i <= nums.length; i++) {int diff = prefixSum[i] - k;for (int j = 0; j < i; j++) {if (prefixSum[j] == diff) res++;}}return res;}// 暴力解法public int subarraySum1(int[] nums, int k) {int res = 0;for (int i = 0; i < nums.length; i++) {for (int j = i; j < nums.length; j++) {int sum = 0;for (int m = i; m <= j; m++) {sum += nums[m];}if (sum == k) res++;}}return res;}// 第二种思路 暴力优化public int subarraySum5(int[] nums, int k) {int res = 0;for (int i = 0; i < nums.length; i++) {int sum = 0;for (int j = i; j >= 0; j--) {sum += nums[j];if (sum == k) res++;}}return res;}}

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

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

相关文章

s3fs挂载minio集群到本地目录

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 1. 前言 MinIO 是一款高性能的对象存储&#xff0c;与 Amazon S3 云存储服务兼容&#xff0c;并且号称是世界上最快的对象存储服…

Docker Ipvlan l3s模式说明

看到Docker Ipvlan中有三种模式L2、L3、L3S模式&#xff0c;查阅了L3S&#xff0c;记录如下&#xff1a; 起因 Docker链接: IPvlan network driver 概念 注释说明&#xff08;摘选自: ipvlan-l3s模式&#xff09; L3S mode与L3 mode 的区别在于启用了iptables (conn-track…

JSON简单了解

文章目录 1、JSON介绍2、ES6模版字符串3、JS对象转化为JSON字符串3.1、手动JS对象转化为JSON字符串3.2、自动JS对象转化为JSON字符串 4、JS对象和java互相转换 1、JSON介绍 JSON 概念&#xff1a;JavaScript Object Notation。JavaScript 对象表示法&#xff0c;简单理解JSON是…

浅谈安科瑞直流电表在新加坡光伏系统中的应用

摘要&#xff1a;本文介绍了安科瑞直流电表在新加坡光伏系统中的应用。主要用于光伏系统中的电流电压电能的计量&#xff0c;配合分流器对发电量进行计量。 Abstract: This article introduces the application of Acrel DC meters in PV system in Indonesia.The device is …

Linux命令_vim的详细用法

简介 vim是一款针对Linux和其他类Unix操作系统的文本编辑器。它是Vi编辑器的升级版本&#xff0c;具有丰富的功能和强大的扩展性。vim有三种基本模式&#xff1a;命令模式、插入模式和可视模式。 命令模式&#xff1a;用户可以使用各种命令移动光标和进行编辑操作&#xff0c;如…

数据库用户映射报错用户、组或角色在当前数据库中已存在 错误15023

报错场景原因&#xff1a; 数据库恢复前用户已存在&#xff0c;恢复后不显示&#xff0c;现重新新建和之前一样的用户名时&#xff0c;对新建的用户名进行数据库权限分配就会出现以上报错错误15023问题。 解决方案&#xff1a; 示例如下> Use [数据库名] go sp_change_us…

移动开发行业——鸿蒙OS NEXT开出繁花

1月18日&#xff0c;华为宣布HarmonyOS NEXT开发者预览版开放申请&#xff0c;根据官方注解&#xff0c;这个版本的鸿蒙系统有个更通俗易懂的名字——“星河版”&#xff0c;也被称为“纯血”鸿蒙。 根据官方解释&#xff0c;之所以取名星河版&#xff0c;寓意鸿蒙OS NEXT就像…

Linux 快速构造大数据文件

文章目录如下 1. 如何生成数据文件 2. 使用 yes 命令构造数据 2.1. 基本用法 2.2. 构造数据文件 3. 使用 awk 命令构造数据 3.1. 基本用法 3.2. awk 循环输出 3.3. awk 指定分隔符 3.4. awk 随机数 3.5. awk 随机字符 3.6. awk 构造数据 4. 总结 1. 如何生成数据文…

开源项目CuteSqlite开发笔记(八):Windows 64位/32位使用GetWindowLongPtr钩子函数

需求描述 在开发CuteSqlite的时候&#xff0c; 有一个功能需要实现&#xff0c;鼠标移到WTL::CStatic上后&#xff0c;发送消息通知CToolTipCtrl弹出。 遇到问题 WTL::CStatic控件没有相应 WM_MOUSEMOVE 消息&#xff0c;需要返回一个HTCLIENT消息来让窗口处理函数执行 WM_MO…

Databend 开源周报第 129 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持标准流 标…

智慧工厂视频监控平台EasyCVR公网收流后内网设备无法播放是什么原因?

安防视频监控平台EasyCVR采用了开放式的网络结构&#xff0c;支持高清视频的接入和传输、分发&#xff0c;平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;此外&am…

如何在WordPress网站中添加多语言搜索(2种简单方法)

您想在WordPress网站中添加多语言搜索吗&#xff1f; 如果您有一个多语言 WordPress 网站&#xff0c;那么添加多语言搜索功能可以帮助用户通过使用自己的语言进行搜索来更快地找到信息。 在本文中&#xff0c;我们将向您展示如何在 WordPress 中轻松添加多语言搜索&#xff…