2017-10-06 59 views
1

你有数字数组的数组中的独特价值,其中大部分除了一个元素会有所不同,例如:挑战:查找偶数或赔率号

  • 所有的元素还可以更你必须找到奇数元素的位置。

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

这里要说的是,我便想起了最好的解决办法:

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

我很好奇,看看我们是否能够找到一个更好的解决方案,或者如果这是迄今最好的(这我不“T认为这是)

此外,我是指在一个合理的水平优化,因此,如果一个变量的名称太长,例如作为逻辑是强劲和最终算法也没关系,只要导致更高性能的一个。

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

+0

https://stackoverflow.com/a/45664127/7879193你想优化什么?你在寻找O(1)还是O(1/n)算法? –

+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();