LeetCode 1471. 数组中的 k 个最强值(排序)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1471. 数组中的 k 个最强值(排序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給你一個整數數組 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 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/the-k-strongest-values-in-an-array
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 一次排序找中位數
- 一次排序,取前面k個答案(也可以用雙指針l = 0, r = n-1,向中間靠)
1204 ms 80.4 MB
class Solution: # py3def getStrongest(self, arr: List[int], k: int) -> List[int]:arr.sort()mid = arr[(len(arr)-1)>>1]def cmp(x):return (abs(x-mid), x)arr = sorted(arr,key=cmp,reverse=True)return arr[0:k]328 ms 31.9 MB
總結
以上是生活随笔為你收集整理的LeetCode 1471. 数组中的 k 个最强值(排序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 332. 重新安排行程
- 下一篇: LeetCode 529. 扫雷游戏(广