牛客笔试题 除2!
题目:
题目链接:除以2!
题目解析:
1.这道题目明显需要用到大根堆来解决,首先需要把数组中的数放入sum中,将偶数放入堆中。
2.接着就取出堆顶的元素除以2,并且使sum减去这个数,同时判断一下这个数是否是偶数,如果是,加入堆中。
代码解析:
public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt(),k = in.nextInt();//创建大根堆PriorityQueue<Integer> heap = new PriorityQueue<>((a,b) -> {return b-a;});//把偶数丢进大根堆,获取偶数大根堆的和long sum = 0,num;for(int i = 0; i < n; i++){num = in.nextLong();sum += num;if(num % 2 == 0) {heap.offer((int)num);}}//拿出堆顶元素,除2,从sum中减掉减小的值while(!heap.isEmpty() && k-- != 0){long t = heap.poll() / 2;sum -= t;if(t % 2 == 0) heap.offer((int)t);}System.out.print(sum);}