1. 程式人生 > >Leetcode 658.找到K個最接近的元素

Leetcode 658.找到K個最接近的元素

分享圖片 color targe 不為 升序 src 更改 return list

找到k個最接近的元素

給定一個排序好的數組,兩個整數 k 和 x,從數組中找到最靠近 x(兩數之差最小)的 k 個數。返回的結果必須要是按升序排好的。如果有兩個數與 x 的差值一樣,優先選擇數值較小的那個數。

示例 1:

輸入: [1,2,3,4,5], k=4, x=3

輸出: [1,2,3,4]

示例 2:

輸入: [1,2,3,4,5], k=4, x=-1

輸出: [1,2,3,4]

說明:

  1. k 的值為正數,且總是小於給定排序數組的長度。
  2. 數組不為空,且長度不超過 104
  3. 數組裏的每個元素與 x 的絕對值不超過 104

更新(2017/9/19):


這個參數 arr 已經被改變為一個整數數組(而不是整數列表)。 請重新加載代碼定義以獲取最新更改。

思路

Intuitively, we can sort the elements in list arr by their absolute difference values to the target x. Then the sublist of the first k elements is the result after sorting the elements by the natural order.

 1 import java.util.ArrayList;
 2
import java.util.Collections; 3 import java.util.List; 4 5 class Solution { 6 public List<Integer> findClosestElements(int[] arr, int k, int x) { 7 List<Integer> list=new ArrayList<>(); 8 for(int number:arr){ 9 list.add(number); 10 }
11 Collections.sort(list,(a, b)->a==b?a-b:Math.abs(a-x)-Math.abs(b-x)); 12 list=list.subList(0,k); 13 Collections.sort(list); 14 return list; 15 } 16 }

技術分享圖片

Leetcode 658.找到K個最接近的元素