我必须为作业创建一个函数,我不知道如何弄清楚它的复杂性。有人可以解释以下功能的大O符号并给出一些解释原因(所以下次我知道)。谢谢。
public static int findRange(int[] thisArray) {
int range = 0, max = 0, min = 0;
max = thisArray[0];
min = thisArray[3];
range = max - min;
return range;
答案 0 :(得分:1)
发布答案会导致更多信息:
您的代码为O(1),如其他评论中所述。我想说的是代码似乎不正确。不确定你需要做什么,但你似乎只是返回数组的第一个和第四个元素之间的差异。要找到最小值和最大值,您需要遍历数组并找到最小值和最大值。在最好的情况下,这将是O(n)。
由于这是一项任务,我不打算编写代码,而只是编写一份关于你需要做什么的指南。
使用此算法,您将循环遍历数组一次,并且将O(n)
,因为迭代次数将随着数组长度的增加而增加。
答案 1 :(得分:0)
对于Java,数组查找是O(1)。由于您所做的只是访问数组的元素(每个元素为O(1)),然后执行恒定时间计算,因此总体复杂度为O(1)。
答案 2 :(得分:0)
逐行:
int range = 0, max = 0, min = 0;
将值分配给简单数据类型需要一些时间常数;这个常量取决于JVM和硬件,但仍然是不变的。 O(1)+ O(1)+ O(1)
max = thisArray[0];
现在这就是诀窍。数组是简单的数据类型,因此对数组中任何值的访问时间也是不变的。 O(1)
min = thisArray[3];
再次访问阵列。 O(1)
range = max - min;
简单数据类型的计算是在恒定时间内执行的。 O(1)
return range;
return语句也是常量。 O(1)
最伟大的术语是 O(1),这就是答案。我还应该提一下,赋值运算符也可以在恒定时间内执行