Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新年混沌黑客实践题-C#解优化 static void minimumBribes(int[]q) { Int32 TotalCount=0; bool blnsucess=true; Int32[]尺寸=订购量(q); 对于(intI=0;intIx).ToArray(); 返回r; } 静态整数索引(int[]z,int整数) { 对于(intI=0;intI_C#_.net_C# 4.0_Visual Studio 2015 - Fatal编程技术网

新年混沌黑客实践题-C#解优化 static void minimumBribes(int[]q) { Int32 TotalCount=0; bool blnsucess=true; Int32[]尺寸=订购量(q); 对于(intI=0;intIx).ToArray(); 返回r; } 静态整数索引(int[]z,int整数) { 对于(intI=0;intI

新年混沌黑客实践题-C#解优化 static void minimumBribes(int[]q) { Int32 TotalCount=0; bool blnsucess=true; Int32[]尺寸=订购量(q); 对于(intI=0;intIx).ToArray(); 返回r; } 静态整数索引(int[]z,int整数) { 对于(intI=0;intI,c#,.net,c#-4.0,visual-studio-2015,C#,.net,C# 4.0,Visual Studio 2015,此代码工作正常,但其运行时太长。 我在HackerRank中被“由于超时而终止”。然而,解决方案在本地计算机上运行良好,但需要更多的时间。 问题链接: 样本输入 2(测试用例的数量) 5(排队人数) 2 1 5 3 4(n个描述队列最终状态的空格分隔整数) 5(排队人数) 2 5 1 3 4(描述队列最终状态的n个空格分隔整数) 它必须打印一个整数,表示所需的最小行数,如果无法进行行配置,则该整数将过于混乱 输出 三, 太混乱 问题: 如何减少其运行时间?目前,我正在使用一个数组。几周前我已经解

此代码工作正常,但其运行时太长。 我在HackerRank中被“由于超时而终止”。然而,解决方案在本地计算机上运行良好,但需要更多的时间。 问题链接:

样本输入

2(测试用例的数量)

5(排队人数)

2 1 5 3 4(n个描述队列最终状态的空格分隔整数)

5(排队人数)

2 5 1 3 4(描述队列最终状态的n个空格分隔整数)

它必须打印一个整数,表示所需的最小行数,如果无法进行行配置,则该整数将过于混乱

输出 三,

太混乱

问题:


如何减少其运行时间?目前,我正在使用一个数组。

几周前我已经解决了它,这是我对该问题的解决方案(100%)

static void minimumBribes(int[]q){
int贿赂=0;
布尔混沌=假;
int n=q.长度;
对于(int i=0;i2)
{               
混乱=真实;
打破
}
对于(int j=Math.Max(0,q[i]-2);jq[i])
贿赂++;
}
如果(混乱)
控制台。WriteLine(“太混乱”);
其他的
控制台。写线(贿赂);
}

除了挑战提供的方法之外,您不需要任何其他方法

我猜StackOverflow不是解决此类问题的正确平台。此外,没有描述此代码的功能。我想它更适合太多嵌套循环。。您至少可以摆脱索引方法并使用内置的Array.IndexOf。这是问题的链接。什么是
intj=Math.Max(0,q[i]-1-1)平均值?你为什么要这样做?@425nesp,因为任何大于q[i]的数字都不可能到达位置q[i]-2,因为只允许两次贿赂。@Gianlucca请提供
int j=Math.Max(0,q[i]的解释-1-1
这意味着什么。我知道你提出了这个解决方案。@NishantMendiratta Sam Liao已经解释了你的问题。行int j=Math.max(0,q[I]-2)可以理解为:当我们使用索引时,数字q[I]最多可以提供2个贿赂,因此它可以左移最多2个位置,因此q[I]-2,但假设我们在索引0处,我们不能在左方向上移动超过该值。因此取两个值的最大值。
static void minimumBribes(int[] q)
{
    Int32 TotalCount = 0;
    bool blnSuccess = true;
    Int32[] size = Ordering(q);
    for (int intI = 0; intI < q.Length; intI++)
    {
        Int32 Tempvariable = 0;
        Int32 TooChaotic = 0;
        Int32 index = Index(size,q[intI]);
        do
        {
            if (q[intI] != size[intI])
            {
                Tempvariable = size[index];
                size[index] = size[index - 1];
                size[index - 1] = Tempvariable;
                index = index - 1;
                TooChaotic = TooChaotic + 1;
                if (TooChaotic > 2)
                {
                    break;
                }
                TotalCount = TotalCount + 1;
            }
        } while (q[intI] != size[intI]);
        if (TooChaotic > 2)
        {
            Console.WriteLine("Too chaotic");
            blnSuccess = false;
            break;
        }
    }
    if (blnSuccess)
    {
        Console.WriteLine(TotalCount);
    }
}

static int[] Ordering(int[] z)
{
    int[] r = new int[z.Length];
    r = z.OrderBy(x => x).ToArray();
    return r;
}
static int Index(int[] z,int integer)
{
    for (int intI = 0; intI < z.Length; intI++)
    {
        if(z[intI]== integer)
        {
            return intI;
        }
    }
    return 0;
}
static void minimumBribes(int[] q) {
    int bribe = 0;
    bool chaotic = false;
    int n = q.Length;
    for(int i = 0; i < n; i++)
    {
        if(q[i]-(i+1) > 2)
        {               
            chaotic = true;
            break;     
        }
        for (int j = Math.Max(0, q[i]-2); j < i; j++)
            if (q[j] > q[i]) 
                bribe++;
    }
    if(chaotic)
        Console.WriteLine("Too chaotic");
    else
        Console.WriteLine(bribe);
}