【发布时间】:2017-11-29 18:30:06
【问题描述】:
我正在尝试解决 CodeWars Kata: Zeros and Ones。 我的代码解决了 1800 多个 Attempt 测试,但仅失败了 100 多个。 我的问题是我看不到测试数据,因为它太大了。 要查看其他 katas 中的测试数据,我可以使用 console.log 语句。 但是,这个挑战的测试数据太大了。我得到一个输入数组的第一部分的列表,然后是“和 400 多个项目”。
下面是对 kata 和我的代码的描述以及一些测试用例。 我试图创建在我的代码运行时失败的测试用例;但是,我无法创建任何失败的内容。
- 我的逻辑合理吗?我在逻辑中遗漏了什么吗?
- 你能提供一个会失败的测试用例吗? (这会更好地帮助我学习,因为我必须分析我的代码来修复它。)
给定一个只包含 0 和 1 的数组,求 零,如果转换为一,将使最长的序列 那些。例如,给定数组... [1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,1], ...将零替换为 索引 10(从 0 开始计数)形成 9 个 1 的序列。你的任务是 编写函数 replaceZero() 来确定在哪里替换 0 和 1 组成最大长度的子序列。注意:如果 是多个结果,返回最后一个 [1,1,0,1,1,0,1,1] //=> 5 数组将始终包含零和一。
function replaceZero(arr){
var highestCt = 0;
var returnIdx = 0;
var onesCt = 0;
var currentHighOnesCt = 0;
function countOnes(currentIZ){ // The input should be the current index of the ZERO.
for(var j = currentIZ - 1; j >= 0; j--){ // Go backwards until a zero is found, or to the beginning of the array.
if(arr[j] === 1){
onesCt = onesCt + 1;
}
else { // if arr[j] === 0
break;
}
}
for(var k = currentIZ + 1; k < arr.length; k++){ // Go forwards to a zero or the end of the array.
if(arr[k] === 1){
onesCt = onesCt + 1;
}
else { // if arr[k] === 0
break;
}
}
if(onesCt >= currentHighOnesCt){
currentHighOnesCt = onesCt;
returnIdx = currentIZ;
}
onesCt = 0;
}
for(var i = 0; i < arr.length - 2; i++)
if(arr[i] === 1 && arr[i + 1] === 0 && arr[i + 2] === 1){
countOnes(i + 1); // Send the index of the ZERO.
}
// console.log("returnIdx: " + returnIdx);
return returnIdx;
}
/*
replaceZero([0,0,1,1,1,0,1,1,0,0,1,0]); // 5
replaceZero([0,0,0,1,1,1,0,1,1,0,0,0]); // 6
replaceZero([1,1,1,1,0,1]); // 4
*/
replaceZero([1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1]); // 9
replaceZero([1,0,0,0,1,0,1,1]); // 5
/*
replaceZero([0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1]); // 6
replaceZero([0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0]); // 8
replaceZero([0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,1,1,0]); // 15
replaceZero([1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,1]); // 10;
replaceZero([1,1,0,1,1,0,1,1]); // 5;
replaceZero([1,1,1,0,1,1,0,1,1,1]); // 6);
*/
【问题讨论】:
-
这个问题更适合codereview.stackexchange.com
-
我在 Code Review 上阅读了规则。它表示代码必须正常工作。我的代码不起作用。
-
你能提供kata的链接吗?
-
我认为这将是一个很好的练习,并对solution 采取了不同的方法它不能解决你的问题,但我想我会把我的解决方案扔在那里..
标签: javascript arrays