您有一个数字数组,其中除一个元素外的大多数元素都不同,例如:
所有元素都可以是偶数,必须找到奇数元素的位置。
所有元素都可能是奇数,必须找到偶数元素的位置。
下面是我想到的最好的解决方案:

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);
  }
}

我很想知道我们是否能找到更好的解决方案,或者这是目前为止最好的(我不认为是这样的)
另外,我指的是逻辑级的优化,所以变量的名称是否太长并不重要,例如,只要逻辑是健壮的,最后的算法将产生更高性能的算法。
你也可以使用任何编程语言。

最佳答案

我尝试使用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();

关于algorithm - 挑战:在偶数或奇数数字数组中查找唯一值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46607876/

10-12 18:33