2016-08-17 195 views
0

在HackerRank上執行this problem,我的O(n)解決方案正在通過除最後三個測試用例之外的所有測試用例,它與運行時錯誤一起失敗。不幸的是,我無法看到運行時錯誤是什麼。當我在Visual Studio中運行測試時,我沒有遇到任何錯誤。任何想法可能導致這個問題?任何想法,爲什麼我在這裏得到一個運行時錯誤?

using System; 
using System.Collections.Generic; 
using System.IO; 
class Solution 
{ 
    public static void Swap(int[] A, int i1, int i2) 
    { 
     int temp = A[i1]; 
     A[i1] = A[i2]; 
     A[i2] = temp; 
    } 
    static void Main(String[] args) 
    { 
     int[] parameters = Array.ConvertAll(Console.ReadLine().Split(' '), Int32.Parse); 
     int n = parameters[0]; 
     int k = parameters[1]; 
     int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), Int32.Parse); 
     int[] pos = new int[n + 1]; // pos[m] is the index of the value m in arr 
     for(int i = 0; i < arr.Length; ++i) 
     { 
      pos[arr[i]] = i; 
     } 
     for(int i = 0; i < arr.Length && k > 0; ++i, --n) 
     { 
      if(arr[i] == n) 
       continue; 
      int j = pos[n]; 
      Swap(pos, arr[i], n); 
      Swap(arr, i, j); 
      --k; 
     } 
     Console.WriteLine(string.Join(" ", arr)); 
    } 
} 
+1

測試失敗後,他們確實允許您從測試用例中「購買」輸入和期望的輸出,並使用您在網站上賺取的一些積分。我知道這不是你所問的,但是這是一個可以考慮的選擇。 –

+0

我想無效的'int'輸入? – slawekwin

回答

0

以下部分的代碼是錯誤的,因爲用戶可以輸入第三位,如15,20,22,array.length是15,但你想獲得指數15,20,22 ... 如果你想訪問這些索引應該將pos的長度設置爲最大值。

for(int i = 0; i < arr.Length; ++i) 
{ 
    pos[arr[i]] = i; 
} 

EDIT1: 更多的指導,請說的代碼和運行時錯誤的信息行。

+0

OP的鏈接問題描述表明,第二行輸入將是第一個「N」整數的置換,「N」是第一行提供的參數之一。如果給出這樣的輸入,則輸入與規範不符,因此程序不會被認爲是合理的。 –

相關問題