[プログラマー]残業指数JAVA


残業指数

問題の説明


会社員のデミはたまに残業しますが、残業すると残業疲労度が溜まります.残業疲労度は、残業開始時の残量に1つの数値を乗じたものです.デミはN時間以内に残業疲労度を最小限に抑える.デミが1時間以内に1時間の仕事量を処理できると言った場合、退勤前の残りのN時間と各仕事の仕事量について、残業疲労度を最低値に下げる関数解を返してください.

せいげんじょうけん

  • 作品の配列長は1より大きく、20000未満である.
  • 作品の要素は50000以下の自然数である.
  • nは100000以下の自然数です.
  • I/O例(説明省略)



    ソースコード

    import java.util.Comparator;
    import java.util.PriorityQueue;
    
    class Solution {
    
        public long solution(int n, int[] works) {
            long answer = 0;
    
            PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());
            for (int work : works) {
                pq.add(work);
            }
    
            while (n > 0) {
                int max = pq.poll();
                pq.add(--max);
                n--;
    
                if(pq.peek() == 0 && n > 0) break;
            }
    
            for (Integer num : pq) {
                answer += Math.pow(num, 2);
            }
            
            if(n != 0) answer = 0;
    
            return answer;
        }
    }

    Comment

  • 最大ヒップを使用して解決します.
    -最高価格は-1で、n減少した.
  • で臀部に残存値がなく、n0でない場合、答えは0に設定されます.