思路:动态规划,然后发现超时,思考了下原因,估计是每次尝试的时候都要尝试1进去,然后1显示在大树的时候不是最快的,于是换了一个测试方法,顺带优化了下算法,311ms
又想了下,关于最小值处理的时候应该带入上一次测试的平方数,下一次处理的平方数不能大于上一次处理的平方数,不过这样不利于冬天规划,所以还是算了。
public class Solution {
Map<Integer, Integer> map=new HashMap<Integer, Integer>();
public int numSquares(int n) {
if (n<4) {
return n;
}
if (map.get(n)==null) {
int s=(int) Math.sqrt(n);
if (s*s==n) {
return 1;
}
int ans=numSquares(n-s*s);
//凭感觉处理了一下测试的最小值
for (int i = s-1; i >=Math.max(s/2, 1); i--) {
int t=numSquares(n-i*i);
if (t<ans) {
ans=t;
}
}
map.put(n, 1+ans);
}
return map.get(n);
}
}
本文探讨了使用动态规划解决特定问题的过程,并通过优化算法提高了效率。重点在于识别并改进了原有方法中存在的瓶颈,通过引入特定策略减少了计算时间,最终实现了311毫秒的性能提升。此外,文章还提出了在最小值处理中利用前次测试结果的策略,尽管尝试将其融入动态规划框架,但考虑到可能的复杂性并未实施。
1431

被折叠的 条评论
为什么被折叠?



