首页 文章详情

python | 算法练习 在排序数组中找最接近的K个数

smile唐 | 469 2021-04-10 07:21 0 0 0
UniSMS (合一短信)



4a9629b8227f1965449cfbbfd0e69e81.webp



分析:

首和尾两个指针,左边指针对应的值与目标 target 的差,与右边指针对应的值与目标 target的差进行比较

左边的差<=右边的差

则右边指针向左移动一个

反之:

左边指针向右移动一个


直到左指针到有指针的元素个数 == k 的时候,说明取到 k 个距离 target 最近的整数了

对A[left_index: right_index+1]中的元素,与目标 target的差值进行升序排序


得到目标列表






class Solution:
   """
   @param A: an integer array
   @param target: An integer
   @param k: An integer
   @return: an integer array
   """
   def kClosestNumbers(self, A, target, k):
       # write your code here
       left_index = 0
       right_index = len(A) - 1
       if k == 0:
           return []


       while left_index <= right_index:
           if right_index - left_index + 1 == k:


               result_list = [{"sub": abs(a-target), "value": a} for a in A[left_index:right_index+1]]
               sort_result_list = sorted(result_list, key=lambda result_list: result_list["sub"])
               return [res["value"] for res in sort_result_list]


           if right_index - left_index + 1 > k:
               left_close = abs(target - A[left_index])
               right_close = abs(A[right_index] - target)
               if left_close <= right_close:
                   right_index -= 1
               if left_close > right_close:
                   left_index += 1





补充:

对列表进行按照元素字典的键进行排序:

sorted(result_list,key=lambda result_list:result["key"])


取绝对值:

abs()






good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter