java - O(n log n) 时间复杂度算法?

标签 java algorithm time big-o

我创建这个算法是为了找到 3 个数字之间的最佳交易。它会执行该程序并找到出售、购买股票并从股票中获利的最佳日期。我需要解释所使用的算法以及时间复杂度如何为 O(n log n),但我很难确定这一点。我希望有人可以解释 O(n log n) 并将其与我的方法联系起来。

这是我的方法:

public static Trade bestTrade(int[] a) 
   {
      int lowest = a[0];
      int lowestIndex = 0;
      int highest = a[a.length - 1];
      int highestIndex = a.length - 1;
      int profit = 0;

      for(int i = 1; i < a.length; i++) 
      {
         if (a[i] < lowest && i < highestIndex) 
         {
            lowest = a[i];
            lowestIndex = i;
         }  
      }

      for(int i = a.length - 2; i >= 0; i--) 
      {
         if (a[i] > highest && i > lowestIndex) 
         {  
            highest = a[i];   
            highestIndex = i;
         }  
      }

      for(int i = 1; i < a.length; i++) 
      {
         if (a[i] < lowest && i < highestIndex) 
         {   
            lowest = a[i];   
            lowestIndex = i;
         }  
      }

      if (highestIndex > lowestIndex) 
      {
         profit = highest - lowest;
         return new Trade(lowestIndex, highestIndex, profit);
      }

      return new Trade(lowestIndex, highestIndex, profit);
   }

}

最佳答案

该函数的复杂度为 O(n),优于 O(n log n) 。 一般来说,您只需查看循环,因为没有嵌套循环,并且只有遍历 a 的所有元素的循环。该函数被视为 n。

关于java - O(n log n) 时间复杂度算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29500877/

相关文章:

Java Web应用程序通信设计?

c# - 从平面数据创建嵌套列表的最简单方法

php - PHP 数组中出现 fatal error

c# - 如何计算 c#/Code review 中两点之间的小时数

java - 序列化 ArrayList Java

java - 已经提交异常 : Response already committed after doing buildPage but before writing response from PageInfo (HippoCMS)

java - 在 Android 上限制语音识别结果

algorithm - count min sketch 如何找到流中出现频率最高的项目? - 重击手

PHP把PM和AM变成24小时制

java - 计算以 long 表示的两个时间之间的时间差