1.題目解析
2208. 將數組和減半的最少操作次數 - 力扣(LeetCode)
2.講解算法原理
?使用當前數組中最大的數將它減半,,直到數組和減小到一半為止,從而快速達到目的
重點是找到最大數,可以采用大根堆快速達到目的
3.代碼
class Solution {public int halveArray(int[] nums) {PriorityQueue<Double> heap=new PriorityQueue<>((a,b)->b.compareTo(a));//創建大根堆double sum=0;for(int x:nums){heap.offer((double)x);sum+=x;}int count=0;sum/=2.0;while(sum>0){double tmp=heap.poll()/2.0;sum-=tmp;count++;heap.offer(tmp);}return count;}
}
4.證明
證明方法:交換論證法