如何解决以下股票购买和出售代码片段的时间复杂度是多少?
最近,我正在尝试股票买卖问题,即我们可以在任意一天购买股票并在接下来的任何一天出售它,我们必须找到可以获得的最大利润。
我首先想到的解决方案是下面的代码,但我无法确定其时间复杂度。如果您可以提供帮助,将会非常有帮助。
int maxProfit(int price[],int start,int end){
if(end<=start)
return 0;
int profit=0;
for(int i=start; i<end; i++){
for(int j=i+1; j<=end; j++){
if(price[j]>price[i]){
int curr_profit=price[j]-price[i]+maxProfit(price,start,i-1)+maxProfit(price,j+1,end);
profit=max(profit,curr_profit);
}
}
return profit;
}
}
解决方法
我认为它可以给您Ω(n!)
如果我们只关注maxProfit(price,j+1,end)
:
一开始,元素数是n。
在每次迭代中,我们都有两个循环,它们通过将元素数减少1来调用maxProfit(price,end)
。
我们得到:
n ^ 2(第2个循环)*(n-1)^ 2(第一个呼叫)*(n-2)^ 2(第二个呼叫)*(n-3)^ 2 * ... *(nn-1)^ 2
给出 O(n!)。
因为我忽略了maxProfit(price,start,i-1)
,这也增加了额外的复杂性,所以我认为最好使用Ω(n!)来表示至少需要n!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。