给出一个未排序的数组,你需要在数组中找到它o(n) 时间复杂度第二大元素。 2 O/ G& s m( Z+ T6 u3 v例如:) x$ E7 K* K5 n0 C% u g
int[] arr1={7,5,6,1,4,2};Second largest element in the array :6 6 X B) ? Z' j. F- |( j/ J解决方案: ! A) E4 i5 D" [8 y 您可以对数组进行排序,然后返回数组中倒数的第二个元素,但这将是 o ( nlogn ) 时间内完成,& b% S) P7 b# z2 `: t8 A 算法: ' Z0 B T1 d1 _3 d/ `最小可能值初始化最高和第二最高。 3 N; ?! d2 I' k }( u% c1 w% c0 V0 {迭代数组。 + z/ B# q$ g Z1 c9 Z! y+ z' p如果当前元素大于最高元素$ B* O# e( M' I# b( K( T/ g0 f: ?( I
分配 secondHighest = 最高) ]1 m' f5 G9 f
分配最高 = currentElement 8 a7 S7 x3 W8 [7 a& G x9 ]8 E否则,如果当前元素大于 否则secondHighest) o' \" f. B) o- I1 ~4 M. s- V8 O/ V; A
分配 secondHighest = 当前元素。在数组中找到第二大数 Java 程序: + g1 a' m* @) i: ~! ]创建名为主 Java 类 FindSecondLargestMain.java 1 |& v" P7 {6 { L+ ] ZFindSecondLargestMain.java3 @- p1 i1 W5 e5 y
package org.arpit.java2blog;public class FindSecondLargestMain public static void main(String args[]) int[] arr1={7,5,6,1,4,2}; int secondHighest=findSecondLargestNumberInTheArray(arr1);System.out.println("Second largest element in the array : " secondHighest); } public static int findSecondLargestNumberInTheArray(int array[]) // Initialize these to the smallest value possible int highest = Integer.MIN_VALUE; int secondHighest = Integer.MIN_VALUE; Loop over the array for (int i = 0; i highest) assign second highest element to highest element secondHighest = highest; highest element to current element highest = array<i>; else if (array<i> > secondHighest && array<i>!=highest) Just replace the second highest secondHighest = array<i>; } // After exiting the loop,secondHighest now represents the second // largest value in the array return secondHighest; }}当您操作上述程序时,您将获得以下输出: 7 l8 y. |% K3 f) M" pSecond largest element in the array : 6这就是如何在数组中找到第二大数字的全部内容。