[Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]

【问题描述】[第560题][和为K的子数组][中等]

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
说明 :数组的长度为 [1, 20,000]。
数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

【解答思路】

1. 暴力

时间复杂度:O(N^2) 空间复杂度:O(1)

 public int subarraySum(int[] nums, int k) {int count = 0;int len = nums.length;for (int left = 0; left < len; left++) {int sum = 0;// 区间里可能会有一些互相抵销的元素for (int right = left; right < len; right++) {sum += nums[right];if (sum == k) {count++;}}}return count;}
2.前缀和
  • 构建前缀和数组,以快速计算区间和;
  • 注意在计算区间和的时候,下标有偏移。
    时间复杂度:O(N^2) 空间复杂度:O(N)
public class Solution {public int subarraySum(int[] nums, int k) {int len = nums.length;// 计算前缀和数组int[] preSum = new int[len + 1];preSum[0] = 0;for (int i = 0; i < len; i++) {preSum[i + 1] = preSum[i] + nums[i];}int count = 0;for (int left = 0; left < len; left++) {for (int right = left; right < len; right++) {// 区间和 [left..right],注意下标偏移if (preSum[right + 1] - preSum[left] == k) {count++;}}}return count;}
}
3. 前缀和 + 哈希表优化

时间复杂度:O(N) 空间复杂度:O(1)
由于只关心次数,不关心具体的解,我们可以使用哈希表加速运算;
由于保存了之前相同前缀和的个数,计算区间总数的时候不是一个一个地加,时间复杂度降到了 O(N)O(N)。
在这里插入图片描述
preSumFreq.put(0, 1):数组中有些数直接就等于k

import java.util.HashMap;
import java.util.Map;public class Solution {public int subarraySum(int[] nums, int k) {// key:前缀和,value:key 对应的前缀和的个数Map<Integer, Integer> preSumFreq = new HashMap<>();// 对于下标为 0 的元素,前缀和为 0,个数为 1preSumFreq.put(0, 1);int preSum = 0;int count = 0;for (int num : nums) {preSum += num;// 先获得前缀和为 preSum - k 的个数,加到计数变量里if (preSumFreq.containsKey(preSum - k)) {count += preSumFreq.get(preSum - k);}// 然后维护 preSumFreq 的定义preSumFreq.put(preSum, preSumFreq.getOrDefault(preSum, 0) + 1);
//getOrDefault 有就是get preSum的对应的值 不存在就为0}return count;}
}
public class Solution {public int subarraySum(int[] nums, int k) {// 记录区间和为 k 的个数和数组前缀元素和。int ans = 0, curr = 0;// 创建 hashMap 记录数组前缀和以及当前和对应的前缀个数。HashMap<Integer, Integer> map = new HashMap<>();// 遍历前初始化前缀和为 0 的个数为 1 。map.put(0, 1);for (int num : nums) {// 依次遍历并累加数组元素。curr += num;int pre = curr - k;// 如果之前有前缀和等于 curr - k ,表示从该前缀之后到当前元素区间和为 k 。if (map.containsKey(pre)) {// 叠加和为 k 的区间个数。ans += map.get(pre);}// 遍历完每个元素后,记录当前前缀和以及个数。if (map.containsKey(curr)) {map.put(curr, map.get(curr) + 1);} else {map.put(curr, 1);}}return ans;}
}

【总结】

1. 暴力优化
2.哈希表 关于次数的优化
3.HashMap

(1) 插入键值对数据
public V put(K key, V value)
(2)根据键值获取键值对值数据
public V get(Object key)
(3)获取Map中键值对的个数
public int size()
(4)判断Map集合中是否包含键为key的键值对
public boolean containsKey(Object key)
(5)判断Map集合中是否包含值为value的键值对
boolean containsValue(Object value)
(6)判断Map集合中是否没有任何键值对
public boolean isEmpty()
(7)清空Map集合中所有的键值对
public void clear()
(8)根据键值删除Map中键值对
public V remove(Object key)

遍历hashMap

for (Integer key : map.keySet()) { if (map.get(key) == 1) {return key;}

原文链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/bao-li-jie-fa-qian-zhui-he-qian-zhui-he-you-hua-ja/
参考链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/560ti-he-wei-kde-zi-shu-zu-by-iceblood/

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

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

相关文章

html表格复制最后一行字,为什么Word中的表格输入文字最后一行文字会自动跳到下一页...

为什么Word中的表格输入文字最后一行文字会自动跳到下一页以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;为什么Word中的表格输入文字最后一行文字会自动跳到下一页, 在WPS文字中的表格中打…

购物车的基本流程

一、购物车的需求描述和基本流程1、需求描述1、 用户可以在登录状态下将商品添加到购物车 2、 用户可以在未登录状态下将商品添加到购物车 3、 用户可以使用购物车一起结算下单 4、 用户可以查询自己的购物车 5、 用户可以在购物车中可以修改购买商品的数量。 6、 用户可以在购…

canvas填充规则

canvas填充规则 const canvas document.getElementById(canvas); const ctx canvas.getContext(2d);ctx.beginPath(); ctx.fillStylegreen ctx.arc(50, 50, 30, 0, Math.PI * 2, true); ctx.arc(50, 50, 20, 0, Math.PI * 2, true); ctx.arc(50, 50, 15, 0, Math.PI * 2, tr…

1.web技术的前世今生

目录 1web Web服务器 Web页面 Web的作用 所谓Web 2web技术 分类主流 Web技术 工作原理 Web服务器 •1990年&#xff0c;第一个Web服务器开始 运行 •网站服务器 •站点服务器 •本质上是一个软件系统 •安装了web服务器软件的计算机 为什么没有流传 •操作太复杂…

计算机科学中的研究成果,田聪教授团队科研成果在计算机科学顶会LICS 2020发表...

(通讯员 王文胜)第35届ACM/IEEE计算机科学逻辑国际会议(ACM/IEEE Symposium on Logic in Computer Science,http://lics.siglog.org/lics20/)&#xff0c;简称LICS 2020&#xff0c;于7月08日—7月11日在线举行(主会场设在德国萨尔布吕肯)。该会议是理论计算机科学领域最顶级的…

[Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]

【问题描述】[第25题][K个一组反转链表][困难] 时间复杂度&#xff1a;O(N^2) 空间复杂度&#xff1a;O(1) java 给你一个链表&#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回翻转后的链表。k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数…

2.jsp初识

目录 什么是jsp jsp的特点 早期的网站一般是用标准的HTML文件也 就是静态网页制作的&#xff0c;通常没有后台数据库、 不能和用户交互&#xff0c;内容更新起来相对也比较 麻烦&#xff0c;适用于一些不需要经常更新的展示型 网站。而动态网页上显示的内容不是固定的&#x…

武大计算机专业湖北录取分数线,武汉大学2020年本科一批分专业录取分数统计(湖北省)...

2020年高考已经过去&#xff0c;为给2021年的高考生们提供一些报考资料&#xff0c;我们将逐一推出一些重点大学在全国各省分专业的录取分数。本文先介绍武汉大学2020年在湖北省本科一批的录取情况。武汉大学始建于1893年&#xff0c;是国家教育部直属重点大学&#xff0c;国家…

[Leedcode][JAVA][第210 题][课程表 II][拓扑排序][BFS][DFS][有向图]

【问题描述】[第210 题][课程表 II][中等] 现在你总共有 n 门课需要选&#xff0c;记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如&#xff0c;想要学习课程 0 &#xff0c;你需要先完成课程 1 &#xff0c;我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的…

牛客小白月赛11 Rinne Loves Xor

题目链接&#xff1a;https://ac.nowcoder.com/acm/contest/370/I code: #include<bits/stdc.h> using namespace std; typedef unsigned long long ll; ll mod1e97; ll pow(ll x,ll n,ll mod) {ll res1;while(n>0){if(n%21){resres*x;resres%mod;}xx*x;xx%mod;n>&…

HDU - 2571 

穿过幽谷意味着离大魔王lemon已经无限接近了&#xff01; 可谁能想到&#xff0c;yifenfei在斩杀了一些虾兵蟹将后&#xff0c;却再次面临命运大迷宫的考验&#xff0c;这是魔王lemon设下的又一个机关。要知道&#xff0c;不论何人&#xff0c;若在迷宫中被困1小时以上&#xf…

3.JSP开发探秘

目录 1JSP工作原理 2JSP设计模式 3JSP开发方式 用户通过浏览器提交请求&#xff0c;服务器端收到请求后进行处理&#xff0c;再以HTML的形式把处理结果返 回给客户端&#xff0c;客户端通过浏览器查看得到的静态网页。 如果JSP程序是第一次被加载&#xff0c;会首先被编…

[Leedcode][JAVA][第152题][乘积最大子数组][动态规划]

【问题描述】[中等] 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2:输入:…

4.与JSP的第一次握手

做一个简单的JSP页面&#xff0c;并用浏览器运行。 打开NetBeans&#xff0c;创建Java Web项目 创建JSP文件 修改JSP文件 <h3>JSP技术带你进入动态网页时代&#xff01;</h3> <!--在JSP页面中进行变量声明--> <% String st"我将成为一名…

九歌计算机在线作诗硬件原理,“九歌”作诗是如何炼成的?

原标题&#xff1a;“九歌”作诗是如何炼成的&#xff1f;你有木有为研究数据的处理一筹莫展&#xff1f;你有木有为课题方法的突破绞尽脑汁&#xff1f;你有木有为完美的宣传文案纠结犯难&#xff1f;亲&#xff0c;是该来一杯清华学术咖啡&#xff0c;约会“信息达人”了&…

WEB_头等舱

题目链接&#xff1a;http://123.206.87.240:9009/hd.php 题解&#xff1a; 打开题目&#xff0c;什么也没有 查看网页源代码&#xff0c;真的什么也没有 于是采用burp进行抓包&#xff0c;burp工具下载链接&#xff1a;https://pan.baidu.com/s/1daOvlBo-pU2k9WYBN_5EQQ 右键&…

[Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

【问题描述】[中等] 根据一棵树的前序遍历与中序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如&#xff0c;给出前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a;3/ \9 20/ \15 7【解答思路】 1. 递归 先序…

登录页面实现

实现登录页面 打开NetBeans&#xff0c;创建Java Web项目 <hr><hr> <form name"" action "" method"post"> <table border"1"> <tr> <td>用户名&#xff1a;</td> …

html和css可以用在ssh里面么,在网站中使用SSH

嗨&#xff0c;我目前正在制作自己的软件来控制一个带有Raspberry Pi的机器人。我想知道是否可以将ssh嵌入到HTML代码中&#xff0c;因此当用户输入Pi的IP地址时&#xff0c;它将通过ssh连接到pi。在网站中使用SSH然后我想要做的是通过ssh发送命令&#xff0c;当他们点击一个按…

JSP环境简介

JSP环境简介 最低环境需求 JDK jdk的安装和配置