编写一个函数,接受一个整数数组和一个 'even' 或 'odd' 的字符串
Write a function that takes in an array of integers, and a string that will be either 'even' or 'odd'
我正在处理 javascript 中的一个问题,我应该编写一个接受整数数组的函数,以及一个 'even' 或 'odd' 的字符串.该函数将计算连续出现 4 个偶数或 4 个奇数的次数。
例如:
quadruples([3,2,2,4,8,5], 'even') // 1
quadruples([2,4,6,8,10,5], 'even') // 2
quadruples([2,4,6,8,10,5], 'odd') // 0
到目前为止,这是我所在的位置:
function quadruples(givenArray, evenOrOdd) {
let arr = []
if(evenOrOdd == 'even') {
if( i = 0; i < givenArray.length; i++) {
}
};
我想我需要 运行 一个 for 循环,然后使用 % 运算符,但我不知道从哪里开始。
感谢任何帮助!
您需要为此使用局部变量和全局变量进行动态编程:
[2、4、6、8、10、5]
- 2 - 偶数,计数为 1,totalCount 为 0
- 4 - 偶数,计数为 2,总计数为 0
- 6 - 偶数,计数为 3,总计数为 0
- 8 - 偶数,计数为 4,总计数为 0
- 10 - 偶数,计数为 5,总计数为 0
- 5 - 奇数,计数为 5,将 totalCount 增加 5 - 4 + 1 = 2,将计数重置为 0
const quadruples = (givenArray, evenOrOdd) => {
// never hardcode `magic numbers`, create constants for them
const sequenceLength = 4
// based on evenOrOdd calculating what the division by 2
// will be if it is even, then 0, if it is odd, then 1
const rest = evenOrOdd === 'even' ? 0 : 1
// this will hold the total count of quadruples
let totalCount = 0
// this is the local count of contiguous elements
let count = 0
// looping over the array
for (let i = 0; i <= givenArray.length; i += 1) {
const el = givenArray[i]
// if the element is not what we want
if (i === givenArray.length || el % 2 !== rest) {
// if the count is 4 or more, we add to totalCount the count
// minus 4 and plus 1, meaning that if we have 4, it's 1 quadruple,
// if it is 5, then it's 2 quadruples, etc.
// Otherwise (count is less than 4) we add 0 (nothing)
totalCount += count >= sequenceLength ? count - sequenceLength + 1 : 0
// resetting the count to zero as we encountered the opposite
// of what we are looking for (even/odd)
count = 0
// if the element is what we need (even or odd)
} else {
// increasing the count of how many we've seen by far
count += 1
}
}
// returning totalCount of quadruples
return totalCount
}
console.log(quadruples([1, 3, 5, 7, 9, 11], 'odd')) // 3
console.log(quadruples([3, 2, 2, 4, 8, 5], 'even')) // 1
console.log(quadruples([2, 4, 6, 8, 10, 5], 'even')) // 2
console.log(quadruples([2, 4, 6, 8, 10, 5], 'odd')) // 0
我写这个递归的。
console.log(quadruples([3, 2, 2, 4, 8, 5], 'even')); // 1
console.log(quadruples([2, 4, 6, 8, 10, 5], 'even')); // 2
console.log(quadruples([2, 4, 6, 8, 10, 5], 'odd')); // 0
console.log(quadruples([5, 4, 6, 8, 10, 5, 2, 2, 2, 2, 4, 4], 'even')); // 4
function quadruples(givenArray, evenOrOdd) {
const maxSequence = 4;
let result = 0;
if (givenArray.length < maxSequence)
return 0;
for (let i = 0; i < maxSequence; i++) {
if (givenArray[i] % 2 != (evenOrOdd == "even" ? 0 : 1)) {
givenArray = givenArray.slice(i + 1);
return (result += quadruples(givenArray, evenOrOdd));
}
}
result++;
givenArray = givenArray.slice(1);
return (result += quadruples(givenArray, evenOrOdd));
}
我正在处理 javascript 中的一个问题,我应该编写一个接受整数数组的函数,以及一个 'even' 或 'odd' 的字符串.该函数将计算连续出现 4 个偶数或 4 个奇数的次数。
例如:
quadruples([3,2,2,4,8,5], 'even') // 1
quadruples([2,4,6,8,10,5], 'even') // 2
quadruples([2,4,6,8,10,5], 'odd') // 0
到目前为止,这是我所在的位置:
function quadruples(givenArray, evenOrOdd) {
let arr = []
if(evenOrOdd == 'even') {
if( i = 0; i < givenArray.length; i++) {
}
};
我想我需要 运行 一个 for 循环,然后使用 % 运算符,但我不知道从哪里开始。
感谢任何帮助!
您需要为此使用局部变量和全局变量进行动态编程: [2、4、6、8、10、5]
- 2 - 偶数,计数为 1,totalCount 为 0
- 4 - 偶数,计数为 2,总计数为 0
- 6 - 偶数,计数为 3,总计数为 0
- 8 - 偶数,计数为 4,总计数为 0
- 10 - 偶数,计数为 5,总计数为 0
- 5 - 奇数,计数为 5,将 totalCount 增加 5 - 4 + 1 = 2,将计数重置为 0
const quadruples = (givenArray, evenOrOdd) => {
// never hardcode `magic numbers`, create constants for them
const sequenceLength = 4
// based on evenOrOdd calculating what the division by 2
// will be if it is even, then 0, if it is odd, then 1
const rest = evenOrOdd === 'even' ? 0 : 1
// this will hold the total count of quadruples
let totalCount = 0
// this is the local count of contiguous elements
let count = 0
// looping over the array
for (let i = 0; i <= givenArray.length; i += 1) {
const el = givenArray[i]
// if the element is not what we want
if (i === givenArray.length || el % 2 !== rest) {
// if the count is 4 or more, we add to totalCount the count
// minus 4 and plus 1, meaning that if we have 4, it's 1 quadruple,
// if it is 5, then it's 2 quadruples, etc.
// Otherwise (count is less than 4) we add 0 (nothing)
totalCount += count >= sequenceLength ? count - sequenceLength + 1 : 0
// resetting the count to zero as we encountered the opposite
// of what we are looking for (even/odd)
count = 0
// if the element is what we need (even or odd)
} else {
// increasing the count of how many we've seen by far
count += 1
}
}
// returning totalCount of quadruples
return totalCount
}
console.log(quadruples([1, 3, 5, 7, 9, 11], 'odd')) // 3
console.log(quadruples([3, 2, 2, 4, 8, 5], 'even')) // 1
console.log(quadruples([2, 4, 6, 8, 10, 5], 'even')) // 2
console.log(quadruples([2, 4, 6, 8, 10, 5], 'odd')) // 0
我写这个递归的。
console.log(quadruples([3, 2, 2, 4, 8, 5], 'even')); // 1
console.log(quadruples([2, 4, 6, 8, 10, 5], 'even')); // 2
console.log(quadruples([2, 4, 6, 8, 10, 5], 'odd')); // 0
console.log(quadruples([5, 4, 6, 8, 10, 5, 2, 2, 2, 2, 4, 4], 'even')); // 4
function quadruples(givenArray, evenOrOdd) {
const maxSequence = 4;
let result = 0;
if (givenArray.length < maxSequence)
return 0;
for (let i = 0; i < maxSequence; i++) {
if (givenArray[i] % 2 != (evenOrOdd == "even" ? 0 : 1)) {
givenArray = givenArray.slice(i + 1);
return (result += quadruples(givenArray, evenOrOdd));
}
}
result++;
givenArray = givenArray.slice(1);
return (result += quadruples(givenArray, evenOrOdd));
}