2017-10-06 62 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();