在任何在线裁判上解决问题时,有时可能会超出时间限制。下面是一些优化代码的方法:
- 尽量减少循环内循环的使用,即嵌套循环:例如:
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
}
在 switch case 中,编译器会直接跳转到条件并执行它们,而不执行其他条件。
- 与其使用“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();
他们都做同样的工作(制作 10000 个 ‘a’字符副本的字符串)。但是第二个选项比第一个选项花费的时间少 10 倍。
因此,始终建议使用 StringBuilder(在Java)而不是“+”运算符进行连接。