1、避免频繁从一个字符串使用String.substring()方法创建新字符串取代旧字符串:使用数组存储字符串范围的下标。
2、使用StringBuilder而不是String,StringBuilder.append()代替 String = str+“a” (String会频繁创建字符串)。
1、使用双指针。如:算法题“三个数相加”。(可参见第3点代码)
2、使用递归,有时也要谨慎使用。
3、对需要反复计算的值,可以用一个变量将值存起来。
LeetCode原题:
16. 最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
修改前:
//先排序
Arrays.sort(nums);
int left,right;
int res=nums[0]+nums[1]+nums[2];
int sum;
if(res>target||nums.length==3){return res;}
for(int i=0;ileft){
sum=nums[i]+nums[left]+nums[right];
if(sum==target){
return sum;
}
if(Math.abs(sum-target)target){right--;}
}
}
return res;
修改后:虽然只提升了1ms,但是也是有用的。
//先排序
Arrays.sort(nums);
int left,right;
int res=nums[0]+nums[1]+nums[2];
int sum;
int diff=Math.abs(res-target);///
int tmp;
if(res>target||nums.length==3){return res;}
for(int i=0;ileft){
sum=nums[i]+nums[left]+nums[right];
if(sum==target){
return sum;
}
tmp=Math.abs(sum-target);
if(tmptarget){right--;}
}
}
return res;
4、回溯算法:即递归后,恢复到递归以前再继续?



