LeetCode 2208. 将数组和减半的最少操作次数(优先队列)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 2208. 将数组和减半的最少操作次数(优先队列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給你一個正整數數組 nums 。每一次操作中,你可以從 nums 中選擇 任意 一個數并將它減小到 恰好 一半。(注意,在后續操作中你可以對減半過的數繼續執行操作)
請你返回將 nums 數組和 至少 減少一半的 最少 操作數。
示例 1: 輸入:nums = [5,19,8,1] 輸出:3 解釋:初始 nums 的和為 5 + 19 + 8 + 1 = 33 。 以下是將數組和減少至少一半的一種方法: 選擇數字 19 并減小為 9.5 。 選擇數字 9.5 并減小為 4.75 。 選擇數字 8 并減小為 4 。 最終數組為 [5, 4.75, 4, 1] ,和為 5 + 4.75 + 4 + 1 = 14.75 。 nums 的和減小了 33 - 14.75 = 18.25 ,減小的部分超過了初始數組和的一半,18.25 >= 33/2 = 16.5 。 我們需要 3 個操作實現題目要求,所以返回 3 。 可以證明,無法通過少于 3 個操作使數組和減少至少一半。示例 2: 輸入:nums = [3,8,20] 輸出:3 解釋:初始 nums 的和為 3 + 8 + 20 = 31 。 以下是將數組和減少至少一半的一種方法: 選擇數字 20 并減小為 10 。 選擇數字 10 并減小為 5 。 選擇數字 3 并減小為 1.5 。 最終數組為 [1.5, 8, 5] ,和為 1.5 + 8 + 5 = 14.5 。 nums 的和減小了 31 - 14.5 = 16.5 ,減小的部分超過了初始數組和的一半, 16.5 >= 31/2 = 16.5 。 我們需要 3 個操作實現題目要求,所以返回 3 。 可以證明,無法通過少于 3 個操作使數組和減少至少一半。提示: 1 <= nums.length <= 10^5 1 <= nums[i] <= 10^7來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-operations-to-halve-array-sum
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 貪心,優先每次減去最大的數的一半,使用優先隊列模擬即可
208 ms 86.7 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 2208. 将数组和减半的最少操作次数(优先队列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于哈希表的索引堆变形(Hackerra
- 下一篇: LeetCode 2169. 得到 0