問題一:求出陣列中最小的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...