劍指offer Java版 30最小的K個數

2021-07-11 11:02:51 字數 1228 閱讀 4737

最小的k個數:

思路一:類似於第29題,直接進行partion,直到返回值未k – 缺點是需要修改輸入的資料

思路二:維護乙個大頂堆,然後遍歷一次給定陣列

如果當前堆元素小於k個

那麼直接將當前元素加入堆中,並調整堆

如果當前堆中元素等於k個

如果當前遍歷資料小於堆頂元素,那麼刪除堆頂然後將當前元素插入堆,並調整堆

如果當前遍歷元素大於堆頂,那麼什麼也不做

由於建立堆和調整堆的大小的時間複雜度都是logk,而且整個過程只需要遍歷一遍陣列,因此時間複雜度是o(n*logk)

ps:這個堆可以自己實現,不足一百行**,更簡單的,也可以直接使用簡易堆,只擁有建立和調整兩個操作

public

class

_q30 }

return result;

}private

void buildmaxheap(int heap)

}// 保持堆的性質:將較小元素逐漸下沉至葉子節點

private

void maxheapify(int heap, int

index)

if(indexr < heap.length && heap[indexr] > heap[index])

if(largestindex != index)

}}

測試**:

public

class

_q30test

extends

testcase ;

int nums2 = ;

int result1 = topk.getleastnumbers(nums1, 5);

int result2 = topk.getleastnumbers(nums2, 4);

int result3 = topk.getleastnumbers(nums2, nums2.length);

int result4 = topk.getleastnumbers(null, 1);

commonutils.printarray(result1);

commonutils.printarray(result2);

commonutils.printarray(result3);

commonutils.printarray(result4);

}}

劍指offer JAVA版題解(全)

序號 題解牛客 oj 資料結構型別 03 劍指offer 二維陣列中的查詢 二維陣列中的查詢 陣列04 劍指offer 替換空格 替換空格 字串05 劍指offer 從尾到頭列印鍊錶 從尾到頭列印鍊錶 鍊錶06 劍指offer 重建二叉樹 重建二叉樹樹07 劍指offer 用兩個棧實現佇列 用兩個棧...

劍指offer Java版 34醜數

醜數 返回第n個醜數 只包含因子 2 3 5的數稱為醜數,第乙個醜數是 1 採用輔助陣列的方法,提高時間效率 下乙個醜數一定是已有的醜數乘以2 或者 3 或者 5 得到的 public class q34 while uglyarray index3 3 uglyarray nextuglyinde...

10矩形覆蓋 劍指offer, java版

題目描述 我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋乙個2n的大矩形,總共有多少種方法?如當n 4時,用第乙個21的小矩形覆蓋最左邊時有兩個選擇 豎著放,則剩下有f 3 種可能 橫著放,則左下角必須有乙個橫著放的小矩形,此時右邊還剩下f 2 種可能 即f ...