[蓝桥杯备赛]itertools下的pairwise函数

今天遇到一个很好用的函数pairwise,含义是:从对象中获取连续的重叠对

直接上例子:

from itertools import pairwise
a = pairwise('12345') 
# 输出的a应为是 12 23 34 45

b = pairwise([1])
# b为空

如果使用for循环遍历它:

from itertools import pairwise

# 示例数据
data = [1, 2, 3, 4, 5]

# 使用 pairwise 遍历
for a, b in pairwise(data):
    print(f"({a}, {b})")

#结果:
#(1, 2)
#(2, 3)
#(3, 4)
#(4, 5)

 [Leetcode]例题

 一些需要的函数:

(1)enumerate() 函数:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

eg:

>>> seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
... 
0 one
1 two
2 three

(2)zip()函数:可以将多个可迭代对象(如列表、元组等)中的对应元素打包成一个个元组,然后返回由这些元组组成的对象。如果输入的可迭代对象长度不同,zip() 函数会以最短的对象长度为准进行打包。

eg:

a = [1, 2, 3]
b = [4, 5, 6]
zipped = zip(a, b)
list(zipped) # 输出: [(1, 4), (2, 5), (3, 6)]

遍历多个迭代器: 

names = ['John', 'Eric']
ages = [30, 22]
for name, age in zip(names, ages):
print(f"{name} is {age} years old.")

---------------------------------------------------------------------------------------------------------------------------------

例题分析:先预处理出空闲的段,然后对于移动会议,其实就是将相邻的空闲段连接到一起,也就是合并一次就可以多选一个相邻的空闲段,如果有k次合并,那么就是最多可以选k+1个相邻空闲段。那么问题就变为维护一个窗口大小最大为k+1的窗口,滑动窗口解决即可。

 代码:

class Solution:
    def maxFreeTime(self, eventTime: int, k: int, startTime: List[int], endTime: List[int]) -> int:
        meet=[]
        for l,r in zip(startTime,endTime):
            meet.append([l,r])
        #free
        arr=[]
        if meet[0][0]>0:
            arr.append(meet[0][0]-0)
        for a,b in pairwise(meet):
            arr.append(b[0]-a[1])
        if eventTime>meet[-1][1]:
            arr.append(eventTime-meet[-1][1])
        
        k+=1
        s=res=0
        #window
        l=0#左边
        for r,x in enumerate(arr):
            s+=x
            res=max(s,res)
            if r-l+1==k:
                s-=arr[l]
                l+=1
        return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值