大O符号?

时间:2018-04-13 21:14:59

标签: java big-o

我必须为作业创建一个函数,我不知道如何弄清楚它的复杂性。有人可以解释以下功能的大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;

3 个答案:

答案 0 :(得分:1)

发布答案会导致更多信息:

您的代码为O(1),如其他评论中所述。我想说的是代码似乎不正确。不确定你需要做什么,但你似乎只是返回数组的第一个和第四个元素之间的差异。要找到最小值和最大值,您需要遍历数组并找到最小值和最大值。在最好的情况下,这将是O(n)。

由于这是一项任务,我不打算编写代码,而只是编写一份关于你需要做什么的指南。

  1. 初始化max和min的两个变量,并将它们设置为最低和最高可能值。
  2. 循环遍历数组并比较每个元素,看它是否大于最大值或小于最小值。
  3. 当循环结束时,max和min将具有您的实际最大值和最小值。
  4. 使用这些变量来计算和返回范围。
  5. 使用此算法,您将循环遍历数组一次,并且将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),这就是答案。我还应该提一下,赋值运算符也可以在恒定时间内执行