Java 给定算法的时间复杂度是多少?

Java 给定算法的时间复杂度是多少?,java,algorithm,data-structures,Java,Algorithm,Data Structures,我们遇到了问题,我想出了解决办法。有人能帮我确定给定解决方案的时间复杂性吗?它应该是O(n)还是O(n^2)?我认为应该是O(n) 问题 编写一个程序,按照给定的顺序打印数组元素的总和 低于条件 如果数组按先后顺序排列6和7,则忽略6和7之间的数字,并考虑其他数求和。< /P> 阵列元素-10,3,6,1,2,7,9 O/P:22 [即10+3+9] Eg2)数组元素-7,1,2,3,6 O/P:19 Eg3)数组元素-1,6,4,7,9 O/P:10 解决方案 outer: for (i =

我们遇到了问题,我想出了解决办法。有人能帮我确定给定解决方案的时间复杂性吗?它应该是O(n)还是O(n^2)?我认为应该是O(n)

问题

编写一个程序,按照给定的顺序打印数组元素的总和 低于条件

如果数组按先后顺序排列6和7,则忽略6和7之间的数字,并考虑其他数求和。< /P> 阵列元素-10,3,6,1,2,7,9 O/P:22 [即10+3+9]

Eg2)数组元素-7,1,2,3,6 O/P:19

Eg3)数组元素-1,6,4,7,9 O/P:10

解决方案

outer: for (i = 0; i < elementsCount; ++i) {
            if (arr[i] == 6) {
                int sumBetweenBounds = arr[i];

                for (j = i + 1; j < elementsCount; ++j) {
                    if (arr[j] == 7) {
                        i = j;
                        continue outer;
                    }

                    sumBetweenBounds += arr[j];
                }

                sum += sumBetweenBounds;
                continue;
            }

            sum += arr[i];
        }
outer:for(i=0;i
在讨论时间复杂性时,我们应该区分最佳情况、最坏情况或平均情况()。如果未提及,通常会出现最坏情况

在最坏的情况下,您的算法是O(n^2),因为当数组元素为6时,内部循环正在运行。在最坏的情况下,所有数组元素都可能是该值

在最好的情况下,它是O(n),但这通常并不有趣


对于一般情况分析,您需要知道算法将在其上运行的所有数组中的值的分布。

首先,您的算法不适用于只有6个数组的数组

第二,您的算法复杂度是O(n^2),请检查只有6个的数组的情况

如果只有6个,你将继续进入每个元素的内部循环,这将给你提到的复杂性,并继续总结你之前总结过的6个

例如:

int[] arr = new int[]{6,6,6,6};
将提供:

//1st iteration
sum += 6+6+6+6;
//2nd iteration
sum += 6+6+6;
//3rd
sum += 6+6;
//4th
sum += 6;

总的来说,它给出的是
sum=60
,而不是24。

您使解决方案比实际问题更复杂,您应该使用single for循环,您可以使用boolean来检查是否要添加元素

您是对的。这是
O(n)
。感谢@OmG的确认。你错了,这是
O(n^2)
。抱歉。如果元素是从
7
具有正概率的分布中随机选择的,则平均情况将是
O(n)
。所以可以肯定地说,除了病理病例,它是一种
O(n)
算法。@b当然,但我们关心那些病理病例。通常在解决这些问题时,最重要的是最坏情况分析。@B问题:问题中提到的分布在哪里?为什么这是一个正确的假设?即使是这样,您也只会谈论平均案例时间复杂性;正如我上面所说的,在复杂性分析中,最坏的情况是在没有指定所需的情况下使用的。@Raz如果这是真的,没有人会使用哈希。我们也不会像使用单纯形法那样高兴。问题没有提到分布。我在补充你的观点,我们需要知道算法将运行的所有数组中的值的分布。这是一个有效的观点。看来我需要改进一下。谢谢