-
Notifications
You must be signed in to change notification settings - Fork 2
/
2784.检查数组是否是好的.html
85 lines (72 loc) · 3.22 KB
/
2784.检查数组是否是好的.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2784. 检查数组是否是好的</title>
</head>
<body>
<script>
// https://leetcode.cn/problems/check-if-array-is-good/description/
// 给你一个整数数组 nums ,如果它是数组 base[n] 的一个排列,我们称它是个 好 数组。
// base[n] = [1, 2, ..., n - 1, n, n] (换句话说,它是一个长度为 n + 1 且包含 1 到 n - 1 恰好各一次,包含 n 两次的一个数组)。比方说,base[1] = [1, 1] ,base[3] = [1, 2, 3, 3] 。
// 如果数组是一个好数组,请你返回 true ,否则返回 false 。
// 注意:数组的排列是这些数字按任意顺序排布后重新得到的数组。
//
// 提示:
// 1 <= nums.length <= 100
// 1 <= num[i] <= 200
/**
* @param {number[]} nums
* @return {boolean}
*/
var isGood = function (nums) {};
// --- answer-1 ---
// 排序
var isGood = function (nums = []) {
nums.sort((a, b) => a - b);
const max = nums.length - 1;
for (let i = 0; i < max - 1; i++) {
if (nums[i] !== i + 1) {
return false;
}
}
return nums[max - 1] === max && nums[max] === max;
};
// --- answer-1 ---
// --- answer-2 ---
// 计数
var isGood = function (nums = []) {
const max = nums.length - 1;
const count = new Array(max).fill(0);
for (let n of nums) {
if (n > max) return false;
count[n - 1]++;
if (n === max) {
if (count[n - 1] > 2) return false;
} else {
if (count[n - 1] > 1) return false;
}
}
return true;
};
// --- answer-2 ---
// var nums = [2, 1, 3];
// var result = false;
// 解释:因为数组的最大元素是 3 ,唯一可以构成这个数组的 base[n] 对应的 n = 3 。但是 base[3] 有 4 个元素,但数组 nums 只有 3 个元素,所以无法得到 base[3] = [1, 2, 3, 3] 的排列,所以答案为 false 。
var nums = [1, 3, 3, 2];
var result = true;
// 解释:因为数组的最大元素是 3 ,唯一可以构成这个数组的 base[n] 对应的 n = 3 ,可以看出数组是 base[3] = [1, 2, 3, 3] 的一个排列(交换 nums 中第二个和第四个元素)。所以答案为 true 。
var nums = [1, 1];
var result = true;
// 解释:因为数组的最大元素是 1 ,唯一可以构成这个数组的 base[n] 对应的 n = 1,可以看出数组是 base[1] = [1, 1] 的一个排列。所以答案为 true 。
// var nums = [3, 4, 4, 1, 2, 1];
// var result = false;
// 解释:因为数组的最大元素是 4 ,唯一可以构成这个数组的 base[n] 对应的 n = 4 。但是 base[n] 有 5 个元素而 nums 有 6 个元素。所以答案为 false 。
console.log('nums = ', nums);
console.log('result = ', result);
console.log('isGood = ', isGood(nums));
</script>
</body>
</html>