和为k的子数组、中位数为k的子数组
和为 K 的子数组
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的连续子数组的个数 。
示例 1:
输入:nums = [1,1,1], k = 2 输出:2
示例 2:
输入:nums = [1,2,3], k = 3 输出:2
提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
代码:
class Solution {public int subarraySum(int[] nums, int k) { int n = nums.length, ans = 0; int[] sum = new int[n + 10]; for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + nums[i - 1]; Map<Integer, Integer> map = new HashMap<>(); map.put(0, 1); for (int i = 1; i <= n; i++) { int t = sum[i], d = t - k; ans += map.getOrDefault(d, 0); map.put(t, map.getOrDefault(t, 0) + 1); } return ans;}}
思路:
利用前缀和的思想,求出每一个元素到第一个元素的和,两个元素前缀和相减就是两个元素之间所有元素的和。
1、定义一个数组,用于存储所有元素的前缀和。
2、定义map集合,以前缀和为key
3、遍历sum,如果map中有(当前前缀和-k)为key的元素,就使得结果加上该key的value。再将当前元素前缀和存入map集合,如果不存在就存入0,存在就加一。
统计中位数为 K 的子数组
给你一个长度为 n
的数组 nums
,该数组由从 1
到 n
的 不同 整数组成。另给你一个正整数 k
。
统计并返回 nums
中的 中位数 等于 k
的非空子数组的数目。
注意:
数组的中位数是按递增顺序排列后位于中间的那个元素,如果数组长度为偶数,则中位数是位于中间靠左的那个元素。
例如,
[2,3,1,4]
的中位数是2
,[8,4,3,5,1]
的中位数是4
。
子数组是数组中的一个连续部分。
示例 1:
输入:nums = [3,2,1,4,5], k = 4 输出:3 解释:中位数等于 4 的子数组有:[4]、[4,5] 和 [1,4,5] 。
示例 2:
输入:nums = [2,3,1], k = 3 输出:1 解释:[3] 是唯一一个中位数等于 3 的子数组。
提示:
n == nums.length
1 <= n <= 105
1 <= nums[i], k <= n
nums
中的整数互不相同
代码:
class Solution {public static int countSubarrays(int[] nums, int k) {int n=nums.length;int t=n+1;int pos=0;while (nums[pos] != k) ++pos;Map<Integer, Integer> map=new HashMap<>();map.put(0,1);int res=0;int count=0;for(int i=0;i<n;i++){if(nums[i]>k){count+=1;}else if(nums[i]<k){count+=-1;}else {count+=t;}if(i>=pos){res+=map.getOrDefault(count-t,0);res+=map.getOrDefault(count-t-1,0);}else{map.put(count,map.getOrDefault(count,0)+1);}}return res;}
}
思路:
这个思路和上面那道题思路差不多,求中位数为k的子序列,可以将大于k的元素都设为1,小于k的元素都设为-1,将等于k的元素都设为t,和为t或者t+1的序列排序后中位数就为key。注意t要大于序列的长度,否则当为一的元素多的话和也会为t。
1、遍历数组,找到值为k的元素的下标。
2、声明一个map,以前缀和为key,该前缀和出现的次数为value。
3、遍历数组,当元素大于k时前缀和加一,小于时加0,等于时加t。
4、进行比较,如果当前元素下标小于所找的元素下标,证明该元素前面所有子序列没有k出现,直接将前缀和存入map加一就行。如果大于所找元素下标,寻找有没有符合当前前缀和-t的map,将结果加上该key的value。
和为k的子数组、中位数为k的子数组相关推荐
- 两个排序数组合并第k或前k个最小值问题
求最小一般用二分,求前最小一般用堆 偶尔看到一个问题,搜索了一些解法,用来存着 1.X[1..n] 和 Y[1..n]为两个数组,每个都包含n个已排好序的数.给出一个求数组X和Y中所有2n个元素的中位 ...
- 求数组中第k个最小数
一.问题描述 给定一个数组,数组中的数据无序,在一个数组中找出其第k个最小的数,例如对于数组x,x = {3,2,1,4,5,6},则其第2个最小的数为2. 二.解题思路 本算法跟快排的思想相似,首先 ...
- 在一个无序的int数组上构建一个最小堆的时间复杂度_漫画:寻找无序数组的第k大元素(修订版)...
----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...
- LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays
1.题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...
- 数组中的元素赋值给元素_漫画:寻找无序数组的第k大元素
本期封面作者:泰勒太乐 ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第 ...
- 从当前元素继续寻找_云漫圈 | 寻找无序数组的第k大元素
戳蓝字"CSDN云计算"关注我们哦! 作者:小灰 来源:程序员小灰 本期封面作者:泰勒太乐 ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k ...
- 云漫圈 | 寻找无序数组的第k大元素
戳蓝字"CSDN云计算"关注我们哦! 作者:小灰 来源:程序员小灰 本期封面作者:泰勒太乐 ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k ...
- 遍历数组是什么意思_漫画:寻找无序数组的第k大元素(修订版)
----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...
- 寻找大数组中位数问题(一)
前言 之前在面试的时候,面试官非常喜欢问:你好,请问在一个很大的数组中怎样快速地找出它的中位数? 当时很迷惑,为什么面试官总喜欢找中位数?后来了解到快速排序算法的思想后,发现如果大概知道待排序数组中位 ...
最新文章
- MySQL面试题 | 附答案解析(十四)
- java 十二星座数据下载_十二星座
- 《VMware Virtual SAN权威指南》一3.10.3 缓存设备与容量设备的比率
- centos7下别名(alias)的特殊用法
- 福昕熊雨前:PDFium开源项目的背后
- linux apache中文名称图片,Apache、NGINX支持中文URL图片、文件名的终极解决方案
- [总结]SqlServer中如何实现自动备份数据!
- tableau两个不同的图合并_【书稿摘要】Tableau地图函数(下)
- 深度比较Java循环的性能
- android 点击,触摸事件
- 辽宁移动客服呼叫中心两级质检管理效果佳
- python为什么胶水语言_Python可以干什么?Python胶水语言由来
- 从苏宁电器到卡巴斯基第34篇:番外篇——晒一晒病毒分析师的桌面(上)
- vue之解决跨域问题
- win10激活工具---KMSAutoNet
- Java源码HashMap、ConcurrentHashMap:JDK1.8HashMap静态常量以及设置的目的,初始容量、最大容量、扩容缩容树化条件
- 图层样式之:内发光、外发光
- mmm monitor mysql_MySQL(MMM架构使用)
- 逻辑回归--美国挑战者号飞船事故_同盾分数与多头借贷Python建模实战
- Python可视化陈氏和R语言--星型图形展示
热门文章
- 完美国际最新服务器,完美国际2:新服“永恒”明日开启,新老朋友踏实安家...
- 树莓派环境处理_树莓派开发环境配置
- JavaScript 闭包(Closure)
- 助力企业数字化转型!涛思数据与永洪科技完成战略合作签约
- ElasticSearch相关知识点
- 阿里飞冰官网 icework,一个集成框架,一键创建一个前端系统
- 无焦点显示窗口解决方法 [转]AttachThreadInput的用法
- ipa包安装失败的几个原因
- Mysql订单表如何设计?
- 利用批处理执行 cmd命令