劍指Offer之TOPK問題

2021-09-29 20:33:39 字數 935 閱讀 8789

問題一:求出陣列中最小的k個數

參考博文:

思路一:維護乙個k的大根堆即可

public static listprocess(int arr, int k) 

priorityqueuemaxheap = new priorityqueue(k, new comparator()

});// 維持k個數的大根堆

for (int i = 0; i < arr.length; i++) else if (maxheap.peek() > arr[i])

} for (integer x : maxheap)

return list;

}

可用於資料量較大的時候

思路二:利用快排的思想

public class topkinarra 

if(i>=j)

swap(arr,i,j);

} swap(arr,left,j);

return j;

} //final

public static listprocess(int arr,int k)

int start=0,end=arr.length-1;

int index=partition(arr,start,end);

while(index!=k-1) else if(k-1變種:求陣列中最大的k個數

public class topkinarray3

priorityqueueminheap = new priorityqueue();

// 維持k個數的小根堆

for(int i=0;ifor(int i=k;i} for (integer x : minheap)

return list;

}

劍指offer之跳台階問題

問題 乙隻青蛙一次可以跳上1級台階,也可以跳上2級,求該青蛙跳上乙個n級的台階總共有多少種跳法。思路 當n 1時,總跳法m 1 當n 2時,總跳法m 2 當n 3時,假設這只青蛙只差一步就能跳到第3階,那它現在就兩種情況,要麼在第1階,要麼在第2階,那青蛙跳上第三階的總跳法就應該是這兩種之和,即m ...

劍指Offer之醜數問題

1.判斷乙個數是否是醜數 將這個數分別除以2,3,5,取出所有情況 public boolean isugly int num while num 1 if num 3 0 if num 5 0 return false return true 2.找出第n個醜數 乙個醜數是由前面乘積而來的,可以設...

劍指offer 問題29

package offer offer interview 29 public class test29 int result numbers 0 int count 1 for int i 1 i numbers.length i else if result numbers i else cou...