📜  删除TLE的方法

📅  最后修改于: 2021-06-26 16:25:31             🧑  作者: Mango

在解决任何在线法官的问题时,有时可能会超过“时限”。以下是一些优化代码的方法:

  • 尽量减少在循环使用循环,例如嵌套循环例如:
for(i = 0 ; i < n ; i++)
     {
           for(j = 0 ; j < n ; j++)
           {
                // Your Code
           }
      }

上面的代码将执行N * N次迭代,并且将花费更多时间,为避免这种情况,我们的想法是考虑一种最小化循环在循环内使用的方法。

  • 不喜欢使用if-else的长链,而是喜欢使用Switch语句例如:
if(condition 1)
{

}
else
{
   if(condition 2)
   {

   }
   else
   {
   
   }
}

假设存在另一个条件3,则代码流首先要检查条件1 ,然后是条件2,然后它将到达条件3 。因此,它需要3次操作。这个想法是使用下面的代码:

switch (c)
{
    // Condition 1
    case 1:
       break;

    // Condition 2
    case 2 :
       break;

       // And so on
}

在切换情况下,编译器将直接转到条件并执行它们,而不执行其他条件。

  • 而不是使用“ i = i + 1” ,而是使用“ ++ i” ,而不是“ i = i + 3” ,而是使用“ i + = 3”
  • 更喜欢预增或预减后增量和后减量之前,除非它是必需的。例如:
int i = 3;

// It will increment in the same step
++i;

// It will increment in the next step
// so it will take more time
i++;
  • 另外,应避免使用指针,在可以避免的地方。指针指向变量的地址,该地址将进一步用于访问变量。因此,请尝试直接访问变量,因为它们可以直接使用,因此可以减少时间。
  • 使用StringBuilder或StringBuffer类进行串联,而不是使用“ +”运算符
1.Using "+" operator
        String x="";
        char c='a';
        for(int i=0;i<10000;i++)
          x+=c;
          
        2.Using StringBulider/StringBuffer Class
        StringBuilder sb=new StringBuilder("");
        char c='a';
        for(int i=0;i<10000;i++)
         sb.apppend(c);
        String x=sb.toString();

他们都做同样的工作(制作的万份的“A”字符的字符串)。但是第二个选项所花费的时间比第一个选项少10倍。

因此,始终建议使用StringBuilder(在Java)而不是“ +”运算符进行串联。

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。