1675:数组的最小偏移量

This commit is contained in:
轩辕龙儿 2022-05-25 18:03:43 +08:00
parent 2250ed4cac
commit 51807bffc8
2 changed files with 147 additions and 0 deletions

View File

@ -0,0 +1,90 @@
//<p>给你一个由 <code>n</code> 个正整数组成的数组 <code>nums</code> </p>
//
//<p>你可以对数组的任意元素执行任意次数的两类操作</p>
//
//<ul>
// <li>如果元素是<strong> 偶数</strong> <strong>除以</strong> <code>2</code>
//
// <ul>
// <li>例如如果数组是 <code>[1,2,3,4]</code> 那么你可以对最后一个元素执行此操作使其变成 <code>[1,2,3,<strong>2</strong>]</code></li>
// </ul>
// </li>
// <li>如果元素是 <strong>奇数</strong> <strong>乘上</strong> <code>2</code>
// <ul>
// <li>例如如果数组是 <code>[1,2,3,4]</code> 那么你可以对第一个元素执行此操作使其变成 <code>[<strong>2</strong>,2,3,4]</code></li>
// </ul>
// </li>
//</ul>
//
//<p>数组的 <strong>偏移量</strong> 是数组中任意两个元素之间的 <strong>最大差值</strong> </p>
//
//<p>返回数组在执行某些操作之后可以拥有的 <strong>最小偏移量</strong> </p>
//
//<p>&nbsp;</p>
//
//<p><strong>示例 1</strong></p>
//
//<pre>
//<strong>输入</strong>nums = [1,2,3,4]
//<strong>输出</strong>1
//<strong>解释</strong>你可以将数组转换为 [1,2,3,<strong>2</strong>]然后转换成 [<strong>2</strong>,2,3,2]偏移量是 3 - 2 = 1
//</pre>
//
//<p><strong>示例 2</strong></p>
//
//<pre>
//<strong>输入</strong>nums = [4,1,5,20,3]
//<strong>输出</strong>3
//<strong>解释</strong>两次操作后你可以将数组转换为 [4,<strong>2</strong>,5,<strong>5</strong>,3]偏移量是 5 - 2 = 3
//</pre>
//
//<p><strong>示例 3</strong></p>
//
//<pre>
//<strong>输入</strong>nums = [2,10,8]
//<strong>输出</strong>3
//</pre>
//
//<p>&nbsp;</p>
//
//<p><strong>提示</strong></p>
//
//<ul>
// <li><code>n == nums.length</code></li>
// <li><code>2 &lt;= n &lt;= 5 * 10<sup><span style="font-size: 10.8333px;">4</span></sup></code></li>
// <li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
//</ul>
//<div><div>Related Topics</div><div><li>贪心</li><li>数组</li><li>有序集合</li><li>优先队列</li></div></div><br><div><li>👍 64</li><li>👎 0</li></div>
package leetcode.editor.cn;
import java.util.*;
// 1675:数组的最小偏移量
public class MinimizeDeviationInArray {
public static void main(String[] args) {
Solution solution = new MinimizeDeviationInArray().new Solution();
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int minimumDeviation(int[] nums) {
TreeSet<Integer> treeSet = new TreeSet<>();
for (int i = 0; i < nums.length; i++) {
if (nums[i] % 2 == 1) {
nums[i] *= 2;
}
treeSet.add(nums[i]);
}
int min = treeSet.last()- treeSet.first();
while (treeSet.last()%2==0){
int num = treeSet.pollLast();
treeSet.add(num/2);
min =Math.min(min,treeSet.last()- treeSet.first());
}
return min;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,57 @@
<p>给你一个由 <code>n</code> 个正整数组成的数组 <code>nums</code></p>
<p>你可以对数组的任意元素执行任意次数的两类操作:</p>
<ul>
<li>如果元素是<strong> 偶数</strong> <strong>除以</strong> <code>2</code>
<ul>
<li>例如,如果数组是 <code>[1,2,3,4]</code> ,那么你可以对最后一个元素执行此操作,使其变成 <code>[1,2,3,<strong>2</strong>]</code></li>
</ul>
</li>
<li>如果元素是 <strong>奇数</strong> <strong>乘上</strong> <code>2</code>
<ul>
<li>例如,如果数组是 <code>[1,2,3,4]</code> ,那么你可以对第一个元素执行此操作,使其变成 <code>[<strong>2</strong>,2,3,4]</code></li>
</ul>
</li>
</ul>
<p>数组的 <strong>偏移量</strong> 是数组中任意两个元素之间的 <strong>最大差值</strong></p>
<p>返回数组在执行某些操作之后可以拥有的 <strong>最小偏移量</strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,3,4]
<strong>输出:</strong>1
<strong>解释:</strong>你可以将数组转换为 [1,2,3,<strong>2</strong>],然后转换成 [<strong>2</strong>,2,3,2],偏移量是 3 - 2 = 1
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [4,1,5,20,3]
<strong>输出:</strong>3
<strong>解释:</strong>两次操作后,你可以将数组转换为 [4,<strong>2</strong>,5,<strong>5</strong>,3],偏移量是 5 - 2 = 3
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [2,10,8]
<strong>输出:</strong>3
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == nums.length</code></li>
<li><code>2 &lt;= n &lt;= 5 * 10<sup><span style="font-size: 10.8333px;">4</span></sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>
<div><div>Related Topics</div><div><li>贪心</li><li>数组</li><li>有序集合</li><li>堆(优先队列)</li></div></div><br><div><li>👍 64</li><li>👎 0</li></div>