1675:数组的最小偏移量
This commit is contained in:
parent
2250ed4cac
commit
51807bffc8
@ -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> </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> </p>
|
||||
//
|
||||
//<p><strong>提示:</strong></p>
|
||||
//
|
||||
//<ul>
|
||||
// <li><code>n == nums.length</code></li>
|
||||
// <li><code>2 <= n <= 5 * 10<sup><span style="font-size: 10.8333px;">4</span></sup></code></li>
|
||||
// <li><code>1 <= nums[i] <= 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)
|
||||
|
||||
}
|
@ -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> </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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>n == nums.length</code></li>
|
||||
<li><code>2 <= n <= 5 * 10<sup><span style="font-size: 10.8333px;">4</span></sup></code></li>
|
||||
<li><code>1 <= nums[i] <= 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>
|
Loading…
Reference in New Issue
Block a user