专题探究:极差

本文深入探讨极差的算法设计,包括小题狂做、最小区间、互不相邻和卡牌游戏等问题的解题思路,强调了二分、双指针等方法在解决极差问题中的应用,适合提升算法思维能力。
摘要由CSDN通过智能技术生成

专题探究:极差

极差的性质,这种东西没有必要讲,毕竟只要善于分析就 ok 了;我们要讨论的主要是解题思路。

极差,最大的特点在于两端不确定性,即最大值与最小值需要同时确定。

由此,我们推想出一种思路:一端枚举,一端加速(如二分等技巧)。当然,还有一种非常重要的思想:双指针,这也就是锻炼思维能力的关键。

来看例题,只有实践才最有意义

小题狂做

小 z 遇到了几道有关极差的算法设计题,请你帮他完成:

  1. 给定一个长为 n n n 的数组,现在要把它分为 k k k 段,使得每一段里极差的最大值尽可能小,问最小值为多少。

  2. 给出一个长度为 n n n 的严格单调增的序列,将其分成 k k k 段,使得每一段的极差的和最小,求这个最小的和。(每段长度至少为1,当长度为1时,其极差为0)

  3. 给定一个长为 n n n 的数组 a a a,你可以进行至多 m m m 次操作,每次操作可以选定数组里的一个下标,若为数组中的最大值则变为数组中的最小值;若为数组中的最小值则变为数组中的最大值;否则不能操作。问经过操作后,数组极差最小是多少。

解法:

  1. 选择的数越多,极差必然会越大。最大值最小问题,满足二分性质,直接做即可。

  2. 简单思维题:如果不分段,极差为 a n − a 1 a_n-a_1 ana1 ;分开一次,极差和为 a n − a i + a i − 1 − a 1 a_n-a_i+a_{i-1}-a_1 anai+ai1a1,也就是最初的极差减去了中间相邻两项差。直接做即可。

  3. 先把元素排好序,然后双指针:确定好最小值与最大值后,可以知道最小需要花费的操作次数:设小于最终最小值的数有 x x x 个,大于最终最大值的数有 y y y 个,那么最少操作次数为 x + y + min ⁡ ( x , y ) x+y+\min(x,y) x+y+min(x,y) 次。

最小区间

给定一个长为 n n n 的数组 a a a,求出其中的一个区间,使得 “极差减去区间长度” 最大( m a x − m i n − l e n max-min-len maxminlen)。

即:你有一个长度为 n n n 的序列 a a a,它的一个区间 [ l , r ] [l,r] [l,r] 的价值是
max ⁡ { a l , a l + 1 , ⋯   , a r } − min ⁡ { a l , a l + 1 , ⋯   , a r } − r + l − 1 \max\{a_l,a_{l+1},\cdots,a_r\}-\min\{a_l,a_{l+1},\cdots,a_r\}-r+l-1 max{ a

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值