查找流浪号码

时间:2019-02-14 20:18:53

标签: javascript

在Code Wars中练习了一些kata,然后遇到了“查找流浪号码”-我认为这是一个非常简单的练习(感谢上帝,我开始对这些挑战感到满意),但是我没有通过其中一项测试。不知道为什么我没有通过测试,网站也没有给我任何关于它们要通过什么数组的想法

下面是我使用的代码-如果有人可以帮助我,那将很棒。

这是挑战和问题的链接


drawer docs

  

您将得到一个奇数长度的整数数组,其中除一个数字外,所有其他整数都相同。

     

完成接受此类数组的方法,并返回该单个不同的数字。

     

输入数组将始终有效! (奇数长度> = 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;
 } 

5 个答案:

答案 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语句中多余的'='