找到k個最接近x的元素
給定一個排序好的陣列,兩個整數 k 和 x,從陣列中找到最靠近 x(兩數之差最小)的 k 個數。返回的結果必須要是按升序排好的。如果有兩個數與 x 的差值一樣,優先選擇數值較小的那個數。
連結:https://leetcode-cn.com/problems/find-k-closest-elements
思路 : 建立大根堆(修改比較器規則:與x的差值的大根堆)
每次放入元素進行比較:與x的差值的結果進行比較
小於則 堆poll 堆offer(新元素)
最後大根堆放入的是差值最小的k個元素,再轉為小根堆,然後給List輸出
class Solution {
public List findClosestElements(int[] arr, int k, int x) {
List list = new LinkedList<>();
Queue queue = new PriorityQueue<>(new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
return Math.abs(o2-x)-Math.abs(o1-x);
}
});
for (int i = 0; i < arr.length ; i++) {
if (i < k) {
queue.offer(arr[i]);
}
else if (Math.abs(arr[i]-x) < Math.abs(queue.peek()-x)){
queue.poll();
queue.offer(arr[i]);
}
}
Queue queue1 = new PriorityQueue<>();
while (!queue.isEmpty()) {
queue1.offer(queue.poll());
}
while (!queue1.isEmpty()){
list.add(queue1.poll());
}
return list;
}
}
相關文章
- leetcode 658.找到K個最接近的元素 JavaLeetCodeJava
- 找到一個數最接近的比它大的2的n次冪的程式碼分析
- [演算法相關]973. 最接近原點的 K 個點演算法
- 找到兩個陣列中的公共元素陣列
- LeetCode每日一題--973. 最接近原點的 K 個點LeetCode每日一題
- 找到無序陣列中最小的k個數陣列
- 最小的 k 個元素--快排變形
- 陣列中的第K個最大元素陣列
- 347. 前 K 個高頻元素
- 自學Java找到20k的工作Java
- 23. 合併K個元素的有序連結串列
- 選擇問題(求第k個最小元素)
- 第k大元素
- 獲取一個陣列裡面第K大的元素陣列
- 215. 陣列中的第K個最大元素陣列
- Leetcode——347. 前K個高頻元素LeetCode
- 建立X個任意元素陣列並且可以遍歷的的一個方法陣列
- 347前 K 個高頻元素(雜湊表、堆排序)排序
- 力扣-215. 陣列中的第K個最大元素力扣陣列
- sqlserver查詢最接近的記錄SQLServer
- LeetCode-215-陣列中的第K個最大元素LeetCode陣列
- 判斷一個元素是否是另一個元素的子元素或者父元素
- 面試演算法:lg(k)時間查詢兩個排序陣列合並後第k小的元素面試演算法排序陣列
- 力扣.16 最接近的三數之和力扣
- 尋找陣列中第K大的元素陣列
- 查詢陣列中第K大的元素陣列
- OPPO R15X與OPPO K1區別對比 OPPO R15X和K1哪個好?
- OPPO K1與榮耀8X區別對比 OPPO K1對比榮耀8X哪個好?
- jquery 查詢某個元素的父元素jQuery
- iOS面試必看,我已經找到12k工作iOS面試
- 最接近資料庫的當前SCN號資料庫
- selenium用java找到表格某一行某一列中含有特定文字的某個元素Java
- [CareerCup] 2.2 Kth to Last Element of Linked List 連結串列的倒數第k個元素AST
- TopK問題,陣列中第K大(小)個元素問題總結TopK陣列
- 找到Intel手冊裡的一個bugIntel
- 集合的前N個元素
- 程式碼隨想錄——棧與佇列8-前K個高頻元素佇列
- jQuery獲取當前元素的下一個元素jQuery