leetcode1471.数组中的k个最强值(python)

    科技2025-08-29  11

    1471.数组中的k个最强值

    给你一个整数数组arr和一个整数k 。设m为数组的中位数,只要满足下述两个前提之一,就可以判定arr[i]的值比arr[j]的值更强:

    | arr[i] - m | > | arr[j] - m |

    | arr[i] - m | == | arr[j] - m |,且arr[i] > arr[j]

    请返回由数组中最强的k个值组成的列表。答案可以以任意顺序返回。

    中位数是一个有序整数列表中处于中间位置的值。形式上,如果列表的长度为n ,那么中位数就是该有序列表(下标从0开始)中位于((n - 1) / 2)

    的元素。

    例如arr = [6, -3, 7, 2, 11],n = 5:数组排序后得到arr = [-3, 2, 6, 7, 11] ,数组的中间位置为

    m = ((5 - 1) / 2) = 2 ,中位数arr[m]的值为6 。

    例如arr = [-7, 22, 17, 3],n = 4:数组排序后得到arr = [-7, 3, 17, 22] ,数组的中间位置为

    m = ((4 - 1) / 2) = 1 ,中位数arr[m]的值为3 。

    示例1:

    输入:arr = [1, 2, 3, 4, 5], k = 2

    输出:[5, 1]

    解释:中位数为 3,按从强到弱顺序排序后,数组变为[5, 1, 4, 2, 3]。最强的两个元素是[5, 1]。[1, 5]

    也是正确答案。注意,尽管 | 5 - 3 | == | 1 - 3 | ,但是5比1更强,因为5 > 1 。

    示例2:

    输入:arr = [1, 1, 3, 5, 5], k = 2

    输出:[5, 5]

    解释:中位数为3, 按从强到弱顺序排序后,数组变为[5, 5, 1, 1, 3]。最强的两个元素是[5, 5]。

    示例 3:

    输入:arr = [6, 7, 11, 7, 6, 8], k = 5

    输出:[11, 8, 6, 6, 7]

    解释:中位数为7, 按从强到弱顺序排序后,数组变为[11, 8, 6, 6, 7, 7]。[11, 8, 6, 6, 7]的任何排列都是正确答案。

    示例4:

    输入:arr = [6, -3, 7, 2, 11], k = 3

    输出:[-3, 11, 2]

    示例5:

    输入:arr = [-7, 22, 17, 3], k = 2

    输出:[22, 17]

    def func(arr, k): n = len(arr) arr.sort() mid = arr[(n - 1) // 2] arr.sort(key=lambda x: (abs(x - mid), x), reverse=True) # 降序,先按abs(x-mid)排序,相同的情况,按x排序 return arr[:k] print(func(arr = [6, -3, 7, 2, 11], k = 3)) # def func(arr, k): # n = len(arr) # arr.sort() # mid = arr[(n - 1) // 2] # def sorted_key(x): # return (abs(x - mid), x) # arr = sorted(arr, key=sorted_key) # return arr[n - k:] # print(func(arr = [6, -3, 7, 2, 11], k = 3))
    Processed: 0.019, SQL: 9