1471. 数组中的 k 个最强值

思路

说下我的思路

AC!

代码

python

class Solution:
    def getStrongest(self, arr, k):
      s = sorted(arr)
      mindex = (len(s) - 1) // 2
      mvalue = s[mindex]
      temp = []
      for i in s:
        temp.append([abs(i-mvalue),i])
      def sorttemp(s1,s2):
        if s1[0] < s2[0]:
          return 1
        if s1[0] > s2[0]:
          return -1
        if s1[0] == s2[0] and s1[1] > s2[1]:
          return -1
        return 1
      return [x[1] for x in sorted(temp, sorttemp)[:k]]

代码(大佬精简版)

python

class Solution:
    def getStrongest(self, arr: List[int], k: int) -> List[int]:
        n = len(arr)
        arr = sorted(arr)
        mid = arr[(n - 1) // 2]
        def mykey(x):
            return (abs(x - mid), x)
        arr = sorted(arr, key=mykey)
        return arr[n - k:]

改进思路

使用排序+双指针

周赛时考虑上面一种方法写起来较快,而且没有TLE。双指针方法,没有尝试,代码暂略。感兴趣的小伙伴可以尝试一下。