1675. Minimize Deviation in Array

Difficulty:
Related Topics:
Similar Questions:

    Problem

    You are given an array nums of n positive integers.

    You can perform two types of operations on any element of the array any number of times:

    If the element is **even**, **divide** it by 2.
    

    The deviation of the array is the maximum difference between any two elements in the array.

    Return **the *minimum deviation* the array can have after performing some number of operations.**

      Example 1:

    Input: nums = [1,2,3,4]
    Output: 1
    Explanation: You can transform the array to [1,2,3,2], then to [2,2,3,2], then the deviation will be 3 - 2 = 1.
    

    Example 2:

    Input: nums = [4,1,5,20,3]
    Output: 3
    Explanation: You can transform the array after two operations to [4,2,5,5,3], then the deviation will be 5 - 2 = 3.
    

    Example 3:

    Input: nums = [2,10,8]
    Output: 3
    

      Constraints:

    Solution

    class Solution {
        public int minimumDeviation(int[] nums) {
            PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);
            int min = Integer.MAX_VALUE;
            for (int num : nums) {
                if (num % 2 == 1) {
                    num *= 2;
                }
                min = Math.min(min, num);
                pq.offer(num);
            }
            int diff = Integer.MAX_VALUE;
            while (pq.peek() % 2 == 0) {
                int max = pq.poll();
                diff = Math.min(diff, max - min);
                min = Math.min(max / 2, min);
                pq.offer(max / 2);
            }
            return Math.min(diff, pq.peek() - min);
        }
    }
    

    Explain:

    nope.

    Complexity: