概览
LeetCode Hot:和为 K 的子数组、最短无序连续子数组、合并二叉树、回文子串、每日温度
LeetCode Hot
2.91 和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
//前缀和
class Solution {
public int subarraySum(int[] nums, int k) {
// 记录合适的连续字符串数量
int count=0;
// 记录前面数字相加之和
int pre=0;
// map记录前几个数字之和为key,出现相同和的次数为value
HashMap<Integer,Integer> map = new HashMap<>();
// 初始化
map.put(0,1);
for (int i = 0; i < nums.length; i++) {
pre+= nums[i]; // 前缀和
// 设
// pre[i]=pre[i−1]+nums[i]
// 由于补上了0,1这个情况 问题由多少个连续数字之和等于k 转为
// pre[i]−pre[j−1]==k (前缀和之差为k,代表这两个前缀和中间的数字相加就是K)
// 如果前面某些数字之和加上这个数字正好等于K(存在一个数字加上nums[i]结果为K
// 说明找到了
if (map.containsKey(pre-k)){
// 累计
count+=map.get(pre-k);
}
// 计算新的和放入map
map.put(pre,map.getOrDefault(pre,0)+1);
}
return count;
}
}
2.92 最短无序连续子数组
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的 最短 子数组,并输出它的长度。