下面的代码是查找数组中显示的数字的次数。 例如:
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;
}
答案 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)。