【LEETCODE】模擬面試-215. Kth Largest Ele
圖:新生大學
Find the kth largest element in an unsorted array.
Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,Given [3,2,1,5,6,4]
and k = 2, return 5.
**Note: **You may assume k is always valid, 1 ≤ k ≤ array's length.
**input: **an unsorted array, an integer k
output: return an integer, which is the kth largest in the given array, including duplicates
corner: when the array is null, or its length is less than k, there is no such element
The primitive idea is to sort the array, and count the kth element, if we use merge sort
, it will take O(n logn), plus O(k) to count.
Or we can optimize that we just sort the largest k elements, ignoring the remain n-k elements. It will raise the Heap
structure, since it's fast to find the largest element.
So, we scan from left to right in the array, first put k elements into a heap to heapify
. Time is O(k)
This heap is a minHeap
where its top is the smallest.
Every time we scan an element in the array, we compare it with the top of the heap.
If it's smaller than or equal to top, we keep moving on.
If it's larger than top, we pop the top, and put it in the top, and main the heap to be a minHeap. Time is O(logk)
After we scanned all the elements in the array, we just need to pop the top, which is the right largest one. Need to compare n - k
times.
Finally, time complexity is O((n - k)logk + k)
space is O(k)
public class Solution { public int findKthLargest(int[] nums, int k){ if ( nums == null || nums.length minHeap = new PriorityQueue(k, new MyComparator()); //1.add first k elements for ( int i = 0; i minHeap.peek() ){ minHeap.poll(); minHeap.offer(nums[i]); } } return minHeap.poll(); }class MyComparator implements Comparator { @Override public int compare(Integer o1, Integer o2){ if ( o1.equals(o2) ){ return 0; }else{ //from small to large, minHeap return o1 - o2; } } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1762/viewspace-2806027/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python leetcode 215. Kth Largest Element in an ArrayPythonLeetCode
- LeetCode Kth Largest Element in an ArrayLeetCode
- LintCode-Kth Largest Element
- LeetCode C++ 703. Kth Largest Element in a Stream【Heap/Design】簡單LeetCodeC++
- [LeetCode] Kth Largest Element in an Array (找出陣列的第k大的元素)LeetCode陣列
- LeetCode:Largest NumberLeetCode
- 模擬面試題面試題
- LeetCode-Largest NumberLeetCode
- Leetcode Kth Smallest Element in a BSTLeetCode
- LeetCode-Largest BST SubtreeLeetCode
- Leetcode - Largest Divisible SubsetLeetCode
- LeetCode-Largest Divisble SubsetLeetCode
- LeetCode-Kth Smallest Element in a Sorted MatrixLeetCode
- 使用OkHttp模擬登陸LeetCodeHTTPLeetCode
- leetcode 368. Largest Divisible SubsetLeetCode
- [LeetCode/LintCode] Largest Palindrome ProductLeetCode
- [LeetCode] 378. Kth Smallest Element in a Sorted MatrixLeetCode
- [LeetCode] 230. Kth Smallest Element in a BSTLeetCode
- leetcode 68. 文字左右對齊 模擬LeetCode
- LeetCode-20. 有效的括號(棧模擬)LeetCode
- [leetcode] 1624. Largest Substring Between Two Equal CharactersLeetCode
- 面試官:請用SQL模擬一個死鎖面試SQL
- 面試官問:能否模擬實現JS的bind方法面試JS
- 有限元模擬 有限體積模擬
- 系統設計面試模擬 | 如何設計Netflix?面試
- git 模擬Git
- ACP模擬
- Keil的軟體模擬和硬體模擬
- Thinking in Java---多執行緒模擬:銀行出納員模擬+飯店模擬+汽車裝配工廠模擬ThinkingJava執行緒
- LeetCode-2. 兩數相加(連結串列+大數加法模擬)LeetCode
- 面試官問:能否模擬實現JS的new操作符面試JS
- ChatGPT模擬Go語言面試 (一次小的測試)ChatGPTGo面試
- ele-alien-前端常用的工具庫前端
- Split Array Largest Sum
- Gpssworld模擬(二):並排排隊系統模擬
- Altair SimSolid 工程模擬軟體 衡祖模擬AISolid
- PID除錯軟體(C#、模擬、模擬)除錯C#
- NOIP模擬50