leetcode:6248. 统计中位数为 K 的子数组【问题转化 + 排序二分】
创始人
2024-02-19 13:15:32

目录

  • 题目截图
  • 题目分析
  • ac code
  • 总结

题目截图

在这里插入图片描述

题目分析

  • 找到k的位置
  • 然后一步步往左走,一步步往右走
  • 统计左边和右边的比当前k小的和比k大的
  • lst = [[small, big]],分为left和right两部分
  • 可以先一侧的单独看small和big,找到big - small = 0或者1的即可
  • 如果两侧的话,比较麻烦
  • 我们将left和right两侧的再转化成diff = big - small
  • 那么我们需要在左侧找一个diff1和右侧找一个diff2
  • 使得diff1 + diff2 = 0或者1即可
  • 特别地,我们固定diff1,然后可以得到diff2两个可能的值
  • 因此,可以先对diff2排序,再用bisect_left和bisect_right卡住所有可选的值即可

ac code

class Solution:def countSubarrays(self, nums: List[int], k: int) -> int:n = len(nums)k_idx = 0p = [0] * (n + 1)for i, v in enumerate(nums):p[v] = iwhile nums[k_idx] != k:k_idx += 1# s个比k小,s个比k大# s个比k小,s + 1个比k大left, right = k - 1, n - klefts, rights = [], []# 左边的情况small, big = 0, 0for i in range(k_idx - 1, -1, -1):if nums[i] < k:small += 1else:big += 1lefts.append([small, big])# 右边的情况small, big = 0, 0for i in range(k_idx + 1, n):if nums[i] < k:small += 1else:big += 1rights.append([small, big])ans = 1 # 自己# small - big#print(lefts)#print(rights)lefts_diff = []for small, big in lefts:lefts_diff.append(big - small)rights_diff = []for small, big in rights:rights_diff.append(big - small)# print(lefts_diff)# print(rights_diff)# 两个和要等于0或者1ans = 1 # 自己for diff in lefts_diff:if diff == 0 or diff == 1:ans += 1for diff in rights_diff:if diff == 0 or diff == 1:ans += 1rights_diff.sort()for num in lefts_diff:need1 = -numneed2 = 1 - numi = bisect_left(rights_diff, need1)j = bisect_right(rights_diff, need2)ans += j - ireturn ans

总结

  • 一个关键点:比k大的 - 比k小的 = 0或者1
  • 为了研究子数组,我们可以考虑记录左侧连续的和右侧连续的出现的small和big个数
  • 我们需要big1 + big2 - small1 - small2 = 0或者1
  • 直接先变成diff1和diff2使得,diff1 + diff2 = 0或者1
  • 那就好办了
  • 遍历diff1,排序diff2,用二分卡住两边,得到数量即可

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...