剑指 Offer II 010
一、题目信息
二、解题方法
定义前缀和pre计算每一次nums数组下标的和,如果没有出现过,就把pre和它的val值放到map中,如果已经出现过了,就把value值+1,在遍历过程中如果map已经包含pre-k的结果了,那么就将结果count+1,遍历结束后,返回count就是本题结果了。
三、代码实现
class Solution{
public int subarraySum(int[] nums, int k) {
int count=0;
int pre=0;
HashMap<Integer,Integer> map=new HashMap<>();
map.put(0,1);
for (int i = 0; i <nums.length ; i++) {
pre+=nums[i];
if(map.containsKey(pre-k)){
count+=map.get(pre-k);
}
map.put(pre,map.getOrDefault(pre,0)+1);
}
return count;
}
}
四、其他LeetCode和剑指offer题解
怎么把i am a student逆置成student a am i?面试题逆置字符串讲解
什么?动态规划10行求出连续子数组的最大和 剑指offer-42讲解
剑指 Offer 39. 数组中出现次数超过一半的数字 简单易懂14行搞定 。人人皆可会
LeetCode 24:两两交换链表中的节点,1662. 检查两个字符串数组是否相等
剑指 Offer 58 - II. 左旋转字符串的三种解法一起看看吧!!
字符串“aabcccccaaa”压缩成“a2b1c5a3“还要返回更小的?力扣面试题 01.06. 字符串压缩讲解
找到不重复的数字进阶版 空间复杂度O(1),时间O(n)平方,不能修改数组内容。不能对数组进行排序