「每日LeetCode」2022年5月25日

本文最后更新于:2023年3月19日 晚上

1346.检查整数及其两倍数是否存在

1346.检查整数及其两倍数是否存在

Category Difficulty Likes Dislikes
algorithms Easy (42.96%) 55 -

Tags
Companies
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
更正式地,检查是否存在两个下标 i 和 j 满足:

  • i != j
  • 0 <= i, j < arr.length
  • arr[i] == 2 * arr[j]

示例 1:
输入:arr = [10,2,5,3] 输出:true 解释:N = 10 是 M = 5 的两倍,即 10 = 2 _ 5 。
示例 2:
输入:arr = [7,1,14,11] 输出:true 解释:N = 14 是 M = 7 的两倍,即 14 = 2 _ 7 。
示例 3:
输入:arr = [3,1,7,11] 输出:false 解释:在该情况下不存在 N 和 M 满足 N = 2 * M 。

提示:

  • 2 <= arr.length <= 500
  • -10^3 <= arr[i] <= 10^3

Discussion | Solution

思路

用一个 set 记录对应的数是否出现过即可,需要特别处理一下出现两个 0 的情况

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
* @lc app=leetcode.cn id=1346 lang=javascript
*
* [1346] 检查整数及其两倍数是否存在
*/

// @lc code=start
/**
* @param {number[]} arr
* @return {boolean}
*/
var checkIfExist = function (arr) {
const set = new Set();
for (const num of arr) {
if (num === 0 && set.has(0)) return true;
set.add(num);
}
return _.some([...set.values()], (item) => {
const targetKey = 2 * _.toNumber(item);
if (targetKey === _.toNumber(item)) return false;
return set.has(targetKey);
});
};
// @lc code=end