c

codeye

V1

2022/09/28阅读:13主题:默认主题

Sorted()函数的key用法

在这个任务中,你将按照参加运动会的运动员的年龄为依据排序,对于相同年龄的运动员则按照相同年龄的人数越多,排在越靠前的位置。即元素频率的递减对数组中的元素进行排序。如果两个元素有相同的频率,就按增加值排序。

解释

([22,23,25,23,17,19,25,23,17]) =>
[23,23,23,25,25,17,17,22,19]

。 --我们按最高频率到最低频率排序。如果两个元素有相同的频率,我们就按增加值排序。 更多的例子在测试案例中。

祝您好运!

from collections import Counter
def solve(arr):
    arrs = Counter(arr)
    return sorted(arr,key= lambda x:[arrs[x],-x],reverse=True)

key = count

def solve(arr):
    return sorted(sorted(arr, reverse=False), key=arr.count, reverse=True)

升级任务

请同时尝试简单时差,请参考之前的时间表达链接文章

你将得到一系列警报响起的时间。你的任务是确定警报之间的最大时间间隔。每个警报在相应的分钟开始时开始响起,并正好响起1分钟。数组中的时间不是按时间顺序排列的。如果有重复的时间,请忽略。

比如说。

solve(["14:51"]) = "23:59"

如果闹钟现在响起,它将在另外23小时59分钟内不会响起。

solve(["23:00""04:22""18:05""06:24"]) == "11:40"

闹钟不响的最大间隔时间是11小时40分钟。 在第二个例子中,警报在一天内响了4次。

solve(["14:51"])
"23:59"

solve(["23:00","04:22","18:05","06:24"])
"11:40"

solve(["21:14""15:34""14:51""06:25""15:30"])
"09:10"

更多的例子在测试案例中。祝您好运!

子函数松耦合,结构清晰可读性高!

def time_to_min(tm):
    h, m = map(int, tm.split(':'))
    return 60 * h + m

def min_to_time(mn):
    return '{:02}:{:02}'.format(*divmod(mn, 60))

def solve(arr):
    marr = [time_to_min(t) for t in sorted(arr)]
    marr.append(marr[0] + 24 * 60)
    
    mx = max(y-x for x, y in zip(marr, marr[1:])) - 1
    return min_to_time(mx)

仅供参考写法 1st

from datetime import datetime

def solve(arr):
    dts = [datetime(2000, 1, 1, *map(int, x.split(':'))) for x in sorted(arr)]
    delta = max(int((b - a).total_seconds() - 60) for a, b in zip(dts, dts[1:] + [dts[0].replace(day=2)]))
    return '{:02}:{:02}'.format(*divmod(delta//60, 60))

2nd

def solve(arr):
    arrs = sorted(arr)
    #特判只有一个时间,返回指定值
    if len(arr)>= 2: 
       maxt= parse(arrs[1]) - parse(arrs[0])
    else:return "23:59"
    
    maxt= parse(arrs[1]) - parse(arrs[0])
    arrzip = arrs[1:] + [arrs[0]]
    #获取逐个时间段的时间间隔
    
    for s,t in list(zip(arrs,arrzip)):
        maxst = []
        delta = parse(t) - parse(s)
        #打擂台找出时间间隔最大的,秒为单位
        
        if delta.seconds > maxt.seconds:
            maxt = delta
            maxst.extend([parse(t),parse(s)])
            
    m,s = divmod(maxt.seconds - 60,60)
    h,m = divmod(m,60)
    #转换为“00:00”格式,丢弃秒
    return f"{h:0>2}:{m:>2}" 

分类:

后端

标签:

后端

作者介绍

c
codeye
V1