954:二倍数对数组

This commit is contained in:
轩辕龙儿 2022-04-01 23:02:42 +08:00
parent 4c4e8f6414
commit d0a8334240
2 changed files with 117 additions and 0 deletions

View File

@ -0,0 +1,81 @@
//给定一个长度为偶数的整数数组 arr只有对 arr 进行重组后可以满足 对于每个 0 <= i < len(arr) / 2都有 arr[2 * i
//+ 1] = 2 * arr[2 * i] 返回 true否则返回 false
//
//
//
// 示例 1
//
//
//输入arr = [3,1,3,6]
//输出false
//
//
// 示例 2
//
//
//输入arr = [2,1,2,6]
//输出false
//
//
// 示例 3
//
//
//输入arr = [4,-2,2,-4]
//输出true
//解释可以用 [-2,-4] [2,4] 这两组组成 [-2,-4,2,4] 或是 [2,4,-2,-4]
//
//
//
//
// 提示
//
//
// 0 <= arr.length <= 3 * 10
// arr.length 是偶数
// -10 <= arr[i] <= 10
//
// Related Topics 贪心 数组 哈希表 排序 👍 153 👎 0
package leetcode.editor.cn;
import java.util.*;
//954:二倍数对数组
public class ArrayOfDoubledPairs {
public static void main(String[] args) {
Solution solution = new ArrayOfDoubledPairs().new Solution();
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean canReorderDoubled(int[] arr) {
//计算一对元素的个数
int num = 0;
//统计每个元素的个数
HashMap<Integer, Integer> map = new HashMap<>();
//对元素进行排序 让小的元素排在前面 这样避免了 2,4,8,1这样的情况 2和4组成了一对导致8与1组不了对
Arrays.sort(arr);
for (int i : arr) {
Integer orDefault = map.getOrDefault(i, 0);
map.put(i, orDefault + 1);
}
for (int i : arr) {
//对0特殊处理
if (i == 0 && map.get(0) < 2) {
continue;
}
//判断是否能组队成功 如果成功就把i以及2*i的数量-1
if (map.containsKey(2 * i) && map.get(2 * i) >= 1 && map.get(i) >= 1) {
map.put(2 * i, map.get(2 * i) - 1);
map.put(i, map.get(i) - 1);
num++;
}
}
return num == arr.length / 2;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,36 @@
<p>给定一个长度为偶数的整数数组 <code>arr</code>,只有对 <code>arr</code> 进行重组后可以满足 “对于每个 <code>0 &lt;=&nbsp;i &lt; len(arr) / 2</code>,都有 <code>arr[2 * i + 1] = 2 * arr[2 * i]</code>&nbsp;时,返回 <code>true</code>;否则,返回 <code>false</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>arr = [3,1,3,6]
<strong>输出:</strong>false
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>arr = [2,1,2,6]
<strong>输出:</strong>false
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>arr = [4,-2,2,-4]
<strong>输出:</strong>true
<strong>解释:</strong>可以用 [-2,-4] 和 [2,4] 这两组组成 [-2,-4,2,4] 或是 [2,4,-2,-4]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 &lt;= arr.length &lt;= 3 * 10<sup>4</sup></code></li>
<li><code>arr.length</code> 是偶数</li>
<li><code>-10<sup>5</sup> &lt;= arr[i] &lt;= 10<sup>5</sup></code></li>
</ul>
<div><div>Related Topics</div><div><li>贪心</li><li>数组</li><li>哈希表</li><li>排序</li></div></div><br><div><li>👍 153</li><li>👎 0</li></div>