【LeetCode】325. Maximum Size Subarray Sum Equals k 解题报告 (C++)
- 作者: 负雪明烛
- id: fuxuemingzhu
- 个人博客:http://fuxuemingzhu.cn/
目录
题目地址:https://leetcode-cn.com/problems/maximum-size-subarray-sum-equals-k/
题目描述
Given an array nums
and a target value k
, find the maximum length of a subarray that sums to k
. If there isn’t one, return 0 instead.
Note:
The sum of the entire nums array is guaranteed to fit within the 32-bit signed integer range.
Example 1:
Input: nums = [1, -1, 5, -2, 3], k = 3
Output: 4
Explanation: The subarray [1, -1, 5, -2] sums to 3 and is the longest.
Example 2:
Input: nums = [-2, -1, 2, 1], k = 1
Output: 2
Explanation: The subarray [-1, 2] sums to 1 and is the longest.
Follow Up:
- Can you do it in O(n) time?
题目大意
给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums[i] + nums[j] + nums[k] < target
成立的三元组 i, j, k
个数(0 <= i < j < k < n)
。
解题方法
prefix Sum
很常见的做法,求数组每个位置的prefix sum(前缀和),并把该sum和其对应的位置i放到字典里保存,由于我们需要找到最长的,因此如果有重复的prefix sum不可以覆盖之前的值。
知道了目标的target是k,每个位置的prefix sum,我们想得到prefix[i] - prefix[j] = k
,所以在i位置我们可以向前寻找到prefix[j] = prefix[i] - k
,这个值可以从字典中直接读取出来。这个就是以i为结尾的最长区间。
我下面的做法为了方便,preSum在最起始位置增加了一个0,其索引位置是-1。
另外这个题中,需要注意的是区间的长度是不是要+1的问题,答案是不用+1,因为知道的prefix[j]
是区间起始位置的前一个位置,即真正的和是k的区间是[j + 1, i]
双闭区间,其区间长度是i - j
。
C++代码如下:
class Solution {
public:
int maxSubArrayLen(vector<int>& nums, int k) {
const int N = nums.size();
vector<int> preSum(N + 1, 0);
unordered_map<int, int> m;
m[0] = -1;
int res = 0;
for (int i = 0; i < N; ++i) {
preSum[i + 1] += preSum[i] + nums[i];
if (!m.count(preSum[i + 1])) {
m[preSum[i + 1]] = i;
}
int cur = preSum[i + 1] - k;
if (m.count(cur)) {
res = max(res, i - m[cur]);
}
}
return res;
}
};
日期
2019 年 9 月 22 日 —— 熬夜废掉半条命
【LeetCode】325. Maximum Size Subarray Sum Equals k 解题报告 (C++)的更多相关文章
- [LeetCode] 325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...
- LeetCode 325. Maximum Size Subarray Sum Equals k
原题链接在这里:https://leetcode.com/problems/maximum-size-subarray-sum-equals-k/ 题目: Given an array nums an ...
- leetcode 560. Subarray Sum Equals K 、523. Continuous Subarray Sum、 325.Maximum Size Subarray Sum Equals k(lintcode 911)
整体上3个题都是求subarray,都是同一个思想,通过累加,然后判断和目标k值之间的关系,然后查看之前子数组的累加和. map的存储:560题是存储的当前的累加和与个数 561题是存储的当前累加和的 ...
- 325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
[抄题]: Given an array nums and a target value k, find the maximum length of a subarray that sums to k ...
- 325. Maximum Size Subarray Sum Equals k
最后更新 二刷 木有头绪啊.. 看答案明白了. 用的是two sum的思路. 比如最终找到一个区间,[i,j]满足sum = k,这个去见可以看做是 [0,j]的sum 减去 [0,i]的Sum. 维 ...
- Subarray Sum & Maximum Size Subarray Sum Equals K
Subarray Sum Given an integer array, find a subarray where the sum of numbers is zero. Your code sho ...
- Subarray Sum & Maximum Size Subarray Sum Equals K && Subarray Sum Equals K
Subarray Sum Given an integer array, find a subarray where the sum of numbers is zero. Your code sho ...
- [LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k
Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...
- Maximum Size Subarray Sum Equals k -- LeetCode
Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...
随机推荐
- 完全用Deepin Linux娱乐、工作、学习(1)
截至今天我已经用全Deepin Desktop Linux环境娱乐.工作.学习了100多天.当你看到这个桌面的时候,会不会觉得它是MacOS?错了,它是Deepin Desktop Linux,而且它 ...
- 日常Javaweb 2021/11/19
Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...
- A Child's History of England.27
Then, the Red King went over to Normandy, where the people suffered greatly under the loose rule of ...
- Mybatis相关知识点(二)
Mybatis解决jdbc编程的问题 1. 数据库连接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题. 解决:在SqlMapConfig.xml中配置数据连接池,使用 ...
- 大数据学习day34---spark14------1 redis的事务(pipeline)测试 ,2. 利用redis的pipeline实现数据统计的exactlyonce ,3 SparkStreaming中数据写入Hbase实现ExactlyOnce, 4.Spark StandAlone的执行模式,5 spark on yarn
1 redis的事务(pipeline)测试 Redis本身对数据进行操作,单条命令是原子性的,但事务不保证原子性,且没有回滚.事务中任何命令执行失败,其余的命令仍会被执行,将Redis的多个操作放到 ...
- docker配置国内阿里云镜像源
使用docker默认镜像源下载镜像会很慢,因此很多情况下,我们在安装完docker以后都会修改为国内的镜像,这样在下载镜像的时候就不用等那么长时间了. 配置docker的镜像为阿里云镜像 方法一 $ ...
- vue引入d3
单页面使用 cnpm install d3 --save-dev 指定版本安装 cnpm install d3@6.3.1 -S <script> import * as d3 from ...
- Dubbo应用到web工程
一.创建提供者03-provider-web (1) 创建工程 创建Maven的web工程,然后创建实现类. (2) 导入依赖 Spring的版本为4.3.16 需要的依赖有: dubbo2.7.0版 ...
- JQuery 和 CSS 等选择器:
JQuery 选择器: CSS 选择器:
- 【力扣】剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4输出:1->1->2->3-> ...