找到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
- 973-最接近原點的 K 個點
- 找到兩個陣列中的公共元素陣列
- LeetCode每日一題--973. 最接近原點的 K 個點LeetCode每日一題
- 找到一個數最接近的比它大的2的n次冪的程式碼分析
- [演算法相關]973. 最接近原點的 K 個點演算法
- 最小的 k 個元素--快排變形
- 找到無序陣列中最小的k個數陣列
- 陣列中的第K個最大元素陣列
- 347. 前 K 個高頻元素
- Leetcode——347. 前K個高頻元素LeetCode
- 23. 合併K個元素的有序連結串列
- 215. 陣列中的第K個最大元素陣列
- 選擇問題(求第k個最小元素)
- 獲取一個陣列裡面第K大的元素陣列
- LeetCode-215-陣列中的第K個最大元素LeetCode陣列
- 第k大元素
- 自學Java找到20k的工作Java
- 建立X個任意元素陣列並且可以遍歷的的一個方法陣列
- 力扣-215. 陣列中的第K個最大元素力扣陣列
- 347前 K 個高頻元素(雜湊表、堆排序)排序
- 尋找陣列中第K大的元素陣列
- 查詢陣列中第K大的元素陣列
- 寫一個方法,傳入數字x,從一個一維陣列裡找到兩個數字符合“n1 + n2 = x”陣列
- 力扣.16 最接近的三數之和力扣
- OPPO R15X與OPPO K1區別對比 OPPO R15X和K1哪個好?
- TopK問題,陣列中第K大(小)個元素問題總結TopK陣列
- OPPO K1與榮耀8X區別對比 OPPO K1對比榮耀8X哪個好?
- 三個元素
- 找到Intel手冊裡的一個bugIntel
- 在一個元素上:hover,改變另一個元素的css屬性CSS
- 程式碼隨想錄——棧與佇列8-前K個高頻元素佇列
- iOS面試必看,我已經找到12k工作iOS面試
- php資料流中第K大元素的計算方法PHP
- R5-2600X對比i5-8600K評測 R5 2600X和i5 8600K哪個好?
- STL.vector容器刪除單個元素、部分元素、全部元素
- abc253E 相鄰元素之差不低於K的序列數
- 230. 二叉搜尋樹中第 K 小的元素