我正在学习动态编程。我试图解决以下问题:
问题简介: 您将获得一个原始计算器,可以使用当前数字执行以下三个操作 x:将x乘以2,将x乘以3,或将x加1。您的目标是正整数n,找到从数字1开始获取数字n所需的最小操作数。
任务 给定整数n,计算获得数字n所需的最小操作数 从数字1开始。 输入由单个整数1 <1组成。 n&lt; 10 ^ 6。
码
var customReplace = function(str, subStr, color) {
var words = str.split(' ');
for (var i = words.length - 1; i >= 0; i--) {
var word = words[i].replace(/<br>/g, '');
if (word === subStr) {
words[i] = '<span class="color-' + color + '">' + words[i] + '</span>';
}
}
return words.join('');
}
此程序输入数大于10 ^ 5时失败。为什么? 我怎样才能改进代码?
答案 0 :(得分:1)
您的问题在线:
std::list<int> path[number+1];
std::list
变量数组,因此如果数量很大,则堆栈溢出并出现段错误。警告:ISO C ++禁止可变长度数组&#39;路径&#39; [-Wvla]
错误:非POD元素类型的可变长度数组&#st; :: list&#39;
NOT 在堆栈上定义巨大的变量 。
相反,您应该使用std::vector
,例如将行更改为:
std::vector<std::list<int>> path(number+1);
然后你的问题就解决了。