知道为什么我在这里遇到运行时错误吗?

时间:2016-08-17 06:03:05

标签: c# .net algorithm

在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 :(得分:0)

下面的部分代码是错误的,因为用户可以输入三个数字,例如15,20,22,array.length是15但你想要访问索引15,20,22 ...... 如果要访问这些索引,应将pos的长度设置为最大数。

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

<强> EDIT1: 有关更多指南,请说出代码行和运行时错误消息。