下面是一些美观的树的例子:
这些是不美观的树木的例子。
给定一个由N个整数组成的数组A,其中AK表示第K个3的高度,返回切割一棵树的方式的数量,以便其余的树在美学上令人愉悦。如果不可能达到预期的结果,您的函数应该返回-1。如果这些树在没有任何移除的情况下已经很美观,那么你的函数应该返回0。
预期结果A1 = 1,2,3,4,2,5;此模式永远不能形成视觉美学,因此函数应返回-1。
预期结果A2 = 1,3,1,2;此模式在视觉上已经很美观,因此它应该返回0。
我试着解决它,但它不起作用,我只得到了一个结果。有人能帮我用javascript编写代码吗?
结果示例:
Example test: [3, 4, 5, 3, 7]
WRONG ANSWER (got 1 expected 3)
Example test: [1, 2, 3, 4]
WRONG ANSWER (got 1 expected -1)
Example test: [1, 3, 1, 2]
CORRECT ANSWER
我的代码:
function solution(A) {
if (A.length < 3) {
return A[0] != A[1] ? 0 : 1;
}
var count = 0;
for (var i = 0; i < A.length - 2 ; i += 2) {
var a = A[i];
var b = A[i+1];
var c = A[i + 2];
if (!(a - b > 0 && b - c < 0) && !(a - b < 0 && b - c > 0)) {
count++;
}
}
return count;
}
发布于 2021-08-20 11:14:38
您可以将问题分解为单个任务,并检查数组是否令人愉快,然后返回零或计算令人愉快的子数组。
key函数使用函数切换方向大/小,并检查下一对是否更大,前一对是否更小,反之亦然。
首先,它需要获得与实际方向相反的方向,因为它首先更改方向,然后再进行检查。
function pleasant(array) {
function isPleasant(array) {
const
toggle = { gt: 'lt', lt: 'gt' },
fns = { gt: (a, b) => a > b, lt: (a, b) => a < b };
let dir = fns.gt(array[0], array[1]) ? 'lt' : 'gt';
return array
.slice(1)
.every((v, i) => fns[dir = toggle[dir]](array[i], v));
}
function count() {
return array.reduce((c, _, i, a) => c + isPleasant([
...a.slice(0, i),
...a.slice(i + 1)
]), 0);
}
return isPleasant(array)
? 0
: count() || -1;
}
console.log(pleasant([3, 4, 5, 3, 7])); // 3
console.log(pleasant([1, 2, 3, 4])); // -1
console.log(pleasant([1, 3, 1, 2])); // 0
console.log(pleasant([1, 1, 1, 1])); // -1
https://stackoverflow.com/questions/68859514
复制相似问题