在Code Wars中练习了一些kata,然后遇到了“查找流浪号码”-我认为这是一个非常简单的练习(感谢上帝,我开始对这些挑战感到满意),但是我没有通过其中一项测试。不知道为什么我没有通过测试,网站也没有给我任何关于它们要通过什么数组的想法
下面是我使用的代码-如果有人可以帮助我,那将很棒。
这是挑战和问题的链接
您将得到一个奇数长度的整数数组,其中除一个数字外,所有其他整数都相同。
完成接受此类数组的方法,并返回该单个不同的数字。
输入数组将始终有效! (奇数长度> = 3)
示例
[1,1,2] ==> 2
[17,17,3,17,17,17,17] ==> 3
function stray(numbers) {
let strayChar = numbers[0];
for(let i = 1; i < numbers.length; i++){
if(strayChar !== numbers[i]){
return strayChar = numbers[i];
}
}
return 0;
}
答案 0 :(得分:0)
function stray(numbers) {
//take first element
let strayChar = numbers[0];
// see if it is different from the next 2
if (strayChar !== numbers[1] && strayChar !== numbers[2]) return strayChar;
// if not find the first value that is different
for(let i = 1; i < numbers.length; i++){
if(strayChar !== numbers[i])return numbers[i];
}
}
const data = [17, 17, 3, 17, 17, 17, 17];
console.log(stray(data));
答案 1 :(得分:0)
在这里,我们执行l1
来使用评估器from itertools import product
combs = product(map(str, l2), repeat=3)
['-'.join([x + y for x, y in zip(l1, c)]) for c in combs]
# ['a1-b1-c1', 'a1-b1-c2', 'a1-b2-c1', 'a1-b2-c2', 'a2-b1-c1', 'a2-b1-c2', 'a2-b2-c1', 'a2-b2-c2']
查找元素,并且测试很简单。查找过滤后的数组长度为1的元素。
find
答案 2 :(得分:0)
您可以使用Set,Map,Array#from,Array#slice和Array#find执行类似的操作。
使用Set
在列表中查找唯一编号。然后只需循环遍历列表的前3个元素。如果一个唯一数字的计数大于1,则表示另一个唯一数字必须为奇数。
const data = [17, 17, 3, 17, 17, 17, 17];
function stray(numbers){
//find unique numbers and set their count to 0
const map = new Map(Array.from(new Set(numbers)).map(v=>([v,0])));
//take first three numbers from numbers array
return Array.from(
numbers.slice(0,3).reduce((a,c)=>{
//update the count
return map.set(c, map.get(c) + 1);
}, map)
//find the number with a count of 0 or 1
).find(([,v])=>v<=1)[0];
}
const res = stray(data);
console.log(res);
在代码大战中提供的更令人印象深刻的解决方案之一是:
const data = [17, 17, 3, 17, 17, 17, 17];
const stray = nums => nums.reduce((a, b) => a ^ b);
const res = stray(data);
console.log(res);
答案 3 :(得分:0)
const stray = numbers => {
let number = 0
numbers.forEach(x => numbers.indexOf(x) ? number = x : null)
return number
}
console.log(stray([17, 17, 3, 17, 17, 17, 17]))
答案 4 :(得分:-1)
我知道已经超过一年了,但是您遇到的错误只是因为if语句中多余的'='