【发布时间】:2021-05-19 06:44:15
【问题描述】:
给你一个整数数组。如果一个整数后面的每个整数都不大于所选整数,则称该整数为“幸运”。您必须计算数组中存在的 Lucky 整数的总数并在最后打印出来。
我尝试了解决方案的简单 O(n2) 复杂度,但我无法通过 4 个不幸隐藏的测试用例。你能猜出那些绕过下面给定算法的测试用例应该是什么,或者如果你有更好的解决方案,请告诉我。
**for(int i=0;i<array.length-1;i++){
flag=true;
for(int j=i+1;j<array.length;j++){
if(a[j]>a[i]){
flag=false;break;
}
}
if(flag)
count++;
}**
请注意count=1;最初是因为数组中的最后一个元素默认是幸运整数。
示例: 输入:[2,4,5,1,1] 输出:3
【问题讨论】:
-
有一个 O(n) 的解决方案。您是否得到错误的答案或时间限制问题?
-
一个刹车情况是空数组,好像不排除
-
可能的
O(n)方法是从最后一个元素开始遍历,这总是很幸运的。找到幸运数字后,增加count并记住该幸运元素。现在您只需要比较k-ith 元素是否为greater而不是之前找到的幸运数字。如果是,则再次增加计数并记住找到的幸运数字以供进一步使用。
标签: algorithm for-loop optimization integer complexity-theory