牛客->除2!

2024-10-09 15:58:45 浏览数 (5)

1.题目:

2.解析:

解法:

步骤一:创建大根堆,把筛选出偶数数据,然后全部放入大根堆;

步骤二:拿出堆顶元素,从sum中减掉, 减小的值,最后返回sum.

代码:

代码语言:javascript复制
 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);
    }

1 人点赞