Algorithm 确定有无递归的时间复杂度

Algorithm 确定有无递归的时间复杂度,algorithm,data-structures,recursion,time-complexity,Algorithm,Data Structures,Recursion,Time Complexity,我正在从一本书中学习数据结构。在这本书中,他们在这一章的末尾有一些伪代码片段,我试图确定时间复杂度。我在理解时间复杂性中的一些概念时有点困难 我有两段代码做同样的事情,看看数组中的一个元素是否至少出现3次;但是,一个使用递归,另一个使用循环。两者我都有答案;有人能告诉我他们是否正确吗 第一种方式(无递归): 布尔findTripleA(int[]anArray){ 如果(anArray.length=3){ 返回true; } } 返回false; } 我认为第一种方法在最佳和最坏情况下的时

我正在从一本书中学习数据结构。在这本书中,他们在这一章的末尾有一些伪代码片段,我试图确定时间复杂度。我在理解时间复杂性中的一些概念时有点困难

我有两段代码做同样的事情,看看数组中的一个元素是否至少出现3次;但是,一个使用递归,另一个使用循环。两者我都有答案;有人能告诉我他们是否正确吗

第一种方式(无递归):

布尔findTripleA(int[]anArray){
如果(anArray.length=3){
返回true;
} 
}
返回false;
}
我认为第一种方法在最佳和最坏情况下的时间复杂度为O(n^2),因为无法避免内部for循环

第二种方法(使用递归):

公共静态整数findTripleB(int[]数组){
如果(anArray.length=0&&anArray[j]>元素){
anArray[j+1]=anArray[j];
j--;
} 
anArray[j+1]=元素;
} 
//检查数组是否包含三个连续的
//相同值的元素
对于(int i=0;i

我认为第二种方法的最坏情况时间复杂度为O(n^2),如果数组已经排序并且可以跳过插入排序,则最佳情况为O(n);但是,我不知道递归是如何起作用的。

< P>第一个例子中最好的例子是O(n)-考虑当出现的元素出现3次时会发生什么(它只在外循环的一次迭代后返回)。 第二种方法不使用递归,并且运行时间正确(从技术上讲,插入排序不会被“跳过”,但是在已经排序的数组上插入排序的运行时间是O(n)-只是确保我们在同一页上)

解决此问题的其他两种方法:

  • 使用更好的方法进行排序,如合并排序。
    将采取O(n log n)最好和最坏的情况

  • 将元素插入要计数的元素的集合。
    将采取预期的O(n)最坏情况,O(1)最佳情况


谢谢。我意识到第二个问题你是对的,类型转换为整数类型让我相信它在调用方法。再次感谢。