在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));
}
}
答案 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:强> 有关更多指南,请说出代码行和运行时错误消息。