挑战:在偶数或赔率数的数组中找到唯一值

时间:2017-10-06 14:17:41

标签: algorithm search comparison logic

你有一个数字数组,其中除了一个元素之外的大多数元素都不同,例如:

  • 所有元素都可以是偶数,你必须找到奇数元素的位置。

  • 所有元素都可以是奇数,你必须找到偶数元素的位置。

这是我想到的最佳解决方案:

let numbers = [0,2,4,6,8,10,12,14,16,17,18,20];
let matchingValue = ((numbers[0] % 2) === (numbers[1] % 2)) ?
                        (numbers[0] % 2) : (numbers[2] % 2);

for(let i = 0; i < numbers.length; i++){
  if((numbers[i] % 2) !== matchingValue) {
     console.log(i);
  }
}

我很想知道我们是否能找到更好的解决方案,或者到目前为止这是否是最好的解决方案(我认为不是这样)

我也指的是逻辑级优化,所以如果变量的名称太长,例如,只要逻辑是健壮的并且最终的算法将会产生结果并不重要在一个更高效的。

您也可以使用任何编程语言。

1 个答案:

答案 0 :(得分:0)

我尝试使用C#,这使我与您的代码功能相同,算法识别负数(我不知道您是否将其作为条件)。 此外,我认识到这个代码也可以进行优化。 Try here

List<int> numeros = new List<int>() { 17, 19, 20, -11, -12, 11, -13, -15, -17 };
        var par = numeros.Where(x => x % 2 == 0).ToList();
        var impar = numeros.Where(x => x % 2 != 0).ToList();
        if (par.Count < impar.Count)
        {
            for (int i = 0; i < par.Count; i++)
            {
                Console.WriteLine(par[i] + " Index: " + numeros.IndexOf(par[i]));
            }
        }
        else if (par.Count > impar.Count)
        {
            for (int i = 0; i < impar.Count; i++)
            {
                Console.WriteLine(impar[i] + " Index: " + numeros.IndexOf(impar[i]));
            }
        }
        Console.Read();