对于大小为N的数组,需要多少比较次数?
对于大小为N的数组,需要多少比较次数?
我想,按照上面所说的“最优算法使用n+log n-2次比较”,我想出了以下不使用二叉树存储值的代码:
在每个递归调用期间,数组大小减半。
因此,比较的数量为:
第一次迭代:n/2次比较
第二次迭代:n/4次比较
第三次迭代:n/8次比较
... 直到log n次迭代?
因此,总共 => n - 1次比较?
function findSecondLargestInArray(array) {
let winner = [];
if (array.length === 2) {
if (array[0] < array[1]) {
return array[0];
} else {
return array[1];
}
}
for (let i = 1; i <= Math.floor(array.length / 2); i++) {
if (array[2 * i - 1] > array[2 * i - 2]) {
winner.push(array[2 * i - 1]);
} else {
winner.push(array[2 * i - 2]);
}
}
return findSecondLargestInArray(winner);
}
package com.array.orderstatistics;
import java.util.Arrays;
import java.util.Collections;
public class SecondLargestElement {
/**
* Total Time Complexity will be n log n + O(1)
* @param str
*/
public static void main(String str[]) {
Integer[] integerArr = new Integer[] { 5, 1, 2, 6, 4 };
// Step1 : Time Complexity will be n log(n)
Arrays.sort(integerArr, Collections.reverseOrder());
// Step2 : Array.get Second largestElement
int secondLargestElement = integerArr[1];
System.out.println(secondLargestElement);
}
}