2020-12-29 1046, 面試題 17.14
1046 最後一塊石頭的重量
有一堆石頭,每塊石頭的重量都是正整數。
每一回合,從中選出兩塊 最重的 石頭,然後將它們一起粉碎。假設石頭的重量分別為 x 和 y,且 x <= y。那麼粉碎的可能結果如下:
如果 x == y,那麼兩塊石頭都會被完全粉碎;
如果 x != y,那麼重量為 x 的石頭將會完全粉碎,而重量為 y 的石頭新重量為 y-x。
最後,最多隻會剩下一塊石頭。返回此石頭的重量。如果沒有石頭剩下,就返回 0。
示例:
輸入:[2,7,4,1,8,1]
輸出:1
解釋:
先選出 7 和 8,得到 1,所以陣列轉換為 [2,4,1,1,1],
再選出 2 和 4,得到 2,所以陣列轉換為 [2,1,1,1],
接著是 2 和 1,得到 1,所以陣列轉換為 [1,1,1],
最後選出 1 和 1,得到 0,最終陣列轉換為 [1],這就是最後剩下那塊石頭的重量。
解法1:
這裡嘗試採用Priority Queue的方式進行處理,每次最頂上的為2個最大的元素。
class Solution {
// 自定義比較器,降序排列
static Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer e1, Integer e2) {
return e2 - e1;
}
};
public int lastStoneWeight(int[] stones) {
int l = stones.length;
PriorityQueue<Integer> pq = new PriorityQueue<>(l, cmp); //這裡我們每次用O(1)取出最大的兩個元素
for(int i=0;i<l;i++)
pq.add(stones[i]);
while(pq.size()>1){
int x = pq.poll();
int y = pq.poll();
if(x<y)
pq.add(y-x);
else if(y<x)
pq.add(x-y);
}
// 出來size只可能為0或者1。
if(pq.size()==1)
return pq.poll();
else
return 0;
}
}
面試題 17.14
設計一個演算法,找出陣列中最小的k個數。以任意順序返回這k個數均可。
示例:
輸入: arr = [1,3,5,7,2,4,6,8], k = 4
輸出: [1,2,3,4]
解法一:排序
public int[] smallestK(int[] arr, int k) {
Arrays.sort(arr);
int[] res = new int[k];
for(int i=0;i<k;i++)
res[i]=arr[i];
return res;
}
解法二: Priority Queue
public int[] smallestK(int[] arr, int k) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i=0;i<arr.length;i++)
pq.add(arr[i]);
int[] res = new int[k];
for(int i=0;i<k;i++)
res[i]=pq.poll();
return res;
}
解法三:Divide and Conquer
相關文章
- HTML最新面試題(筆試面試題)HTML面試題筆試
- 面試題:面試經面試題
- 2020-12-29
- 「面試題」20+Vue面試題整理面試題Vue
- 面試題面試題
- react面試題 機試題React面試題
- 面試測試題面試
- 測試面試題面試題
- RabbitMQ面試專題,面試必看MQ面試
- 面試題1:9月25日面試題面試題
- [面試題]事件迴圈經典面試題解析面試題事件
- ZZULIOJ1046
- 【面試】面試常見問題整理面試
- 【Java面試】JSP常見面試題!JavaJS面試題
- 【Java面試】Servlet常見面試題!JavaServlet面試題
- 【Java面試】 Javascript常見面試題!JavaScript面試題
- webpack面試題Web面試題
- Promise面試題Promise面試題
- 面試題-mysql面試題MySql
- 面試題1面試題
- vue 面試題Vue面試題
- JavaScript面試題JavaScript面試題
- vue面試題!!!Vue面試題
- 面試題2面試題
- redis面試題Redis面試題
- 面試題整理面試題
- mybatis面試題MyBatis面試題
- 2024.04.07面試題面試題
- React面試題React面試題
- 面試題:JS面試題JS
- 面試題:HTTP面試題HTTP
- vue面試題Vue面試題
- Go 面試題Go面試題
- PHP 面試題PHP面試題
- HashMap面試題HashMap面試題
- List面試題面試題
- MyBatis 面試題MyBatis面試題
- zookeeper面試題面試題