【发布时间】:2020-08-26 06:35:50
【问题描述】:
我已经调整了以下问题,而不是显示长度。我想实际输出数组。
我们将和谐数组定义为最大值和最小值之差正好为 1 的数组。 现在,给定一个整数数组,你需要找到它所有可能子序列中最长和谐子序列的长度。 (我正在寻找实际的数组)
示例 1: 输入:[1,3,2,2,5,2,3,7] 输出:5 解释:最长的和谐子序列是[3,2,2,2,3]。
我编写了以下代码,但我推入 vals 的值不正确。我需要帮助找出如何纠正它。
const findLHS = (nums) => {
const hash = new Map()
let vals = []
let min = nums[0], max = nums[0]
for (let num of nums) {
//logic for finding min and max in range is flawed
min = min + max === 1 ? Math.min(min, num) : min
max = max - min === 1 ? Math.max(max, num) : max
hash.set(num, (hash.get(num) || 0) + 1)
console.log(max);
}
//logic is flawed below
for (let key of nums) {
// if (hash.has(key + 1) && hash.has(key + 1) <= max) {
// vals.push(hash.get(key + 1))
// }
if (hash.has(key) === min || hash.has(key) === max) {
vals.push(min) || vals.push(max)
}
}
return vals
}
测试用例,以及我认为应该返回的内容:
console.log(findLHS([1, 3, 2, 2, 5, 2, 3, 7]))//5 [3,2,2,2,3]
console.log(findLHS([1, 2, 3, 4])) //2 [1,2]
console.log(findLHS([1, 2, 2, 1])) //4 [1,2,2,1]
【问题讨论】:
-
只是为了确定要求-您是说“最长和谐子序列”的意思是“任何元素的集合,即使不是直接相邻的元素”?我会将“子序列”读作“紧邻的元素”。有了这个定义,我认为你的第一个案例的答案是 [3, 2, 2] 而不是 [3, 3, 3, 3, 3]。应该是哪个?
-
什么是约束(数组的大小、值的范围)?
-
我只有第一个的输出,基于我从唯一的约束中得出的问题是最大值和最小值不应该超过 1,所以应该输出 nums 中的任何内容基于那个条件。这将是数组的大小。例如,第一种情况应该是
[3,2,2,2,3]并且更正它们不必相邻。 -
[1,2,3,4]有几个和谐的数组,长度相同。 -
原题中求长度时,输出为2;表示数组中的两个项目。只能有一个最小值或最大值与另一个相距,它们必须以这种方式构造,以便仅根据分配最小值和最大值的顺序输出第一个可行数组。所以在这种情况下,我们的最大值应该是二,最小值是一。因此导致只有 [1,2] 是我们的答案。至少这是我从最初的问题中收集到的。
标签: javascript arrays algorithm hashmap min