给定代码的时间复杂度。

时间:2013-01-06 09:40:12

标签: java performance

下面的代码是查找数组中显示的数字的次数。 例如:

1,2,2,2,3,4,5,5,5,5 number 2 = 3 times number 5 = 4 times.

以下代码的Java时间复杂度是多少? 在时间复杂度方面解决这个问题的最佳方法是什么?

public static void main(String[]args)
    {
        int[] data = {1,1,2,3,4,4,4,5,6,7,8,8,8,8};
        System.out.println(count(data,8));


    }


public static int count(int[] a, int x)
{
    int count=0;
    int index=0;
    while(index<a.length)
    {
        if(a[index]==x)
        {
            count++;
        }
        index++;

    }
    return count;
}

6 个答案:

答案 0 :(得分:3)

  

是o(n),logN还是其他?

你看一下每个元素,所以它是O(n)

  

如果是o(n),我可以使用LogN同谋完成此任务吗?

使用低值和高值进行二进制搜索,搜索的值仅小于您搜索的值和上面的值。这两个结果之间的差异将告诉你有多少。这是一个O(Log N)搜索。

答案 1 :(得分:1)

while(index<a.length)

此循环在data中的每个值运行一次。这是 O(n)。如果要在 O(log n)中执行此操作,则需要排序数组和二进制搜索。你有一个排序数组,所以你只需要进行二分搜索。

答案 2 :(得分:1)

答案是 O(n)

在每个索引处循环遍历数组。

e.g。数组大小为10 - > 10次​​比较,阵列大小为100 - > 100比较等等。

答案 3 :(得分:1)

您检查数组的每个元素,因此您的代码具有O(n)时间复杂度。

要在O(log n)时间内完成,你必须利用数组排序的事实。这可以使用binary search的变体来完成。由于这看起来像家庭作业,我会让你在提供更多提示之前考虑一下。

答案 4 :(得分:0)

<强> O(n)的 此代码使用数组的每个元素。

while(index<a.length)

您可以在

上替换它
for(int index = 0; index < a.length; i++)

答案 5 :(得分:0)

O(n)。当代码遍历数组的每个元素时,它的0(n)。