# 在数组中查找第二大元素：详细代码实现

2021年3月12日15:15:07 发表评论 410 次浏览

## 本文概述

``````Input: arr[] = {12, 35, 1, 10, 34, 1}
Output: The second largest element is 34.
Explanation: The largest element of the
array is 35 and the second
largest element is 34

Input: arr[] = {10, 5, 10}
Output: The second largest element is 5.
Explanation: The largest element of
the array is 10 and the second
largest element is 5

Input: arr[] = {10, 10, 10}
Output: The second largest does not exist.
Explanation: Largest element of the array
is 10 there is no second largest element``````

## C ++ 14

``````// C++ program to find second largest
// element in an array

#include <bits/stdc++.h>
using namespace std;

/* Function to print the second largest elements */
void print2largest( int arr[], int arr_size)
{
int i, first, second;

/* There should be atleast two elements */
if (arr_size < 2) {
printf ( " Invalid Input " );
return ;
}

// sort the array
sort(arr, arr + arr_size);

// start from second last element
// as the largest element is at last
for (i = arr_size - 2; i >= 0; i--) {
// if the element is not
// equal to largest element
if (arr[i] != arr[arr_size - 1]) {
printf ( "The second largest element is %d\n" , arr[i]);
return ;
}
}

printf ( "There is no second largest element\n" );
}

/* Driver program to test above function */
int main()
{
int arr[] = { 12, 35, 1, 10, 34, 1 };
int n = sizeof (arr) / sizeof (arr);
print2largest(arr, n);
return 0;
}``````

## Java

``````// Java program to find second largest
// element in an array
import java.util.*;
class GFG{

// Function to print the
// second largest elements
static void print2largest( int arr[], int arr_size)
{
int i, first, second;

// There should be
// atleast two elements
if (arr_size < 2 )
{
System.out.printf( " Invalid Input " );
return ;
}

// Sort the array
Arrays.sort(arr);

// Start from second last element
// as the largest element is at last
for (i = arr_size - 2 ; i >= 0 ; i--)
{
// If the element is not
// equal to largest element
if (arr[i] != arr[arr_size - 1 ])
{
System.out.printf( "The second largest " +
"element is %d\n" , arr[i]);
return ;
}
}

System.out.printf( "There is no second " +
"largest element\n" );
}

// Driver code
public static void main(String[] args)
{
int arr[] = { 12 , 35 , 1 , 10 , 34 , 1 };
int n = arr.length;
print2largest(arr, n);
}
}

// This code is contributed by gauravrajput1``````

## C#

``````// C# program to find second largest
// element in an array
using System;

class GFG{

// Function to print the
// second largest elements
static void print2largest( int []arr, int arr_size)
{
int i;

// There should be
// atleast two elements
if (arr_size < 2)
{
Console.Write( " Invalid Input " );
return ;
}

// Sort the array
Array.Sort(arr);

// Start from second last element
// as the largest element is at last
for (i = arr_size - 2; i >= 0; i--)
{

// If the element is not
// equal to largest element
if (arr[i] != arr[arr_size - 1])
{
Console.Write( "The second largest " +
"element is {0}\n" , arr[i]);
return ;
}
}

Console.Write( "There is no second " +
"largest element\n" );
}

// Driver code
public static void Main(String[] args)
{
int []arr = { 12, 35, 1, 10, 34, 1 };
int n = arr.Length;

print2largest(arr, n);
}
}

// This code is contributed by Amit Katiyar``````

``The second largest element is 34``

• 时间复杂度：O(n log n)。
排序数组所需的时间为O(n log n)。
• 辅助空间：O(1)。
由于不需要额外的空间。

## C ++ 14

``````// C++ program to find second largest
// element in an array

#include <bits/stdc++.h>
using namespace std;

/* Function to print the second largest elements */
void print2largest( int arr[], int arr_size)
{
int i, first, second;

/* There should be atleast two elements */
if (arr_size < 2) {
printf ( " Invalid Input " );
return ;
}

int largest = second = INT_MIN;

// find the largest element
for ( int i = 0; i < arr_size; i++) {
largest = max(largest, arr[i]);
}

// find the second largest element
for ( int i = 0; i < arr_size; i++) {
if (arr[i] != largest)
second = max(second, arr[i]);
}
if (second == INT_MIN)
printf ( "There is no second largest element\n" );
else
printf ( "The second largest element is %d\n" , second);
}

/* Driver program to test above function */
int main()
{
int arr[] = { 12, 35, 1, 10, 34, 1 };
int n = sizeof (arr) / sizeof (arr);
print2largest(arr, n);
return 0;
}``````

## Java

``````// Java program to find second largest
// element in an array
class GFG{

// Function to print the second largest elements
static void print2largest( int arr[], int arr_size)
{
int i, first, second;

// There should be atleast two elements
if (arr_size < 2 )
{
System.out.printf( " Invalid Input " );
return ;
}

int largest = second = Integer.MIN_VALUE;

// Find the largest element
for (i = 0 ; i < arr_size; i++)
{
largest = Math.max(largest, arr[i]);
}

// Find the second largest element
for (i = 0 ; i < arr_size; i++)
{
if (arr[i] != largest)
second = Math.max(second, arr[i]);
}
if (second == Integer.MIN_VALUE)
System.out.printf( "There is no second " +
"largest element\n" );
else
System.out.printf( "The second largest " +
"element is %d\n" , second);
}

// Driver code
public static void main(String[] args)
{
int arr[] = { 12 , 35 , 1 , 10 , 34 , 1 };
int n = arr.length;

print2largest(arr, n);
}
}

// This code is contributed by Amit Katiyar``````

## Python3

``````# Python3 program to find
# second largest element
# in an array

# Function to print
# second largest elements
def print2largest(arr, arr_size):

# There should be atleast
# two elements
if (arr_size < 2 ):
print ( " Invalid Input " );
return ;

largest = second = - 2454635434 ;

# Find the largest element
for i in range ( 0 , arr_size):
largest = max (largest, arr[i]);

# Find the second largest element
for i in range ( 0 , arr_size):
if (arr[i] ! = largest):
second = max (second, arr[i]);

if (second = = - 2454635434 ):
print ( "There is no second " +
"largest element" );
else :
print ( "The second largest " +
"element is \n" , second);

# Driver code
if __name__ = = '__main__' :

arr = [ 12 , 35 , 1 , 10 , 34 , 1 ];
n = len (arr);
print2largest(arr, n);

# This code is contributed by shikhasingrajput``````

## C#

``````// C# program to find second largest
// element in an array
using System;

class GFG{

// Function to print the second largest elements
static void print2largest( int []arr, int arr_size)
{
// int first;
int i, second;

// There should be atleast two elements
if (arr_size < 2)
{
Console.Write( " Invalid Input " );
return ;
}

int largest = second = int .MinValue;

// Find the largest element
for (i = 0; i < arr_size; i++)
{
largest = Math.Max(largest, arr[i]);
}

// Find the second largest element
for (i = 0; i < arr_size; i++)
{
if (arr[i] != largest)
second = Math.Max(second, arr[i]);
}

if (second == int .MinValue)
Console.Write( "There is no second " +
"largest element\n" );
else
Console.Write( "The second largest " +
"element is {0}\n" , second);
}

// Driver code
public static void Main(String[] args)
{
int []arr = { 12, 35, 1, 10, 34, 1 };
int n = arr.Length;

print2largest(arr, n);
}
}

// This code is contributed by Amit Katiyar``````

``The second largest element is 34``

• 时间复杂度：上)。
需要两次遍历数组。
• 辅助空间：O(1)。
由于不需要额外的空间。

``````1) Initialize two variables first and second to INT_MIN as
first = second = INT_MIN
2) Start traversing the array, a) If the current element in array say arr[i] is greater
than first. Then update first and second as, second = first
first = arr[i]
b) If the current element is in between first and second, then update second to store the value of current variable as
second = arr[i]
3) Return the value stored in second.``````

## C

``````// C program to find second largest
// element in an array

#include <limits.h>
#include <stdio.h>

/* Function to print the second largest elements */
void print2largest( int arr[], int arr_size)
{
int i, first, second;

/* There should be atleast two elements */
if (arr_size < 2) {
printf ( " Invalid Input " );
return ;
}

first = second = INT_MIN;
for (i = 0; i < arr_size; i++) {
/* If current element is greater than first
then update both first and second */
if (arr[i] > first) {
second = first;
first = arr[i];
}

/* If arr[i] is in between first and
second then update second  */
else if (arr[i] > second && arr[i] != first)
second = arr[i];
}
if (second == INT_MIN)
printf ( "There is no second largest element\n" );
else
printf ( "The second largest element is %dn" , second);
}

/* Driver program to test above function */
int main()
{
int arr[] = { 12, 35, 1, 10, 34, 1 };
int n = sizeof (arr) / sizeof (arr);
print2largest(arr, n);
return 0;
}``````

## C ++

``````// C++ program to find second largest
// element in an array
#include <bits/stdc++.h>
using namespace std;

// Function to print the second
// largest elements
void print2largest( int arr[], int arr_size)
{
int i, first, second;

// There should be atleast two elements
if (arr_size < 2)
{
cout << " Invalid Input " ;
return ;
}

first = second = INT_MIN;
for (i = 0; i < arr_size; i++)
{

// If current element is greater
// than first then update both
// first and second
if (arr[i] > first)
{
second = first;
first = arr[i];
}

// If arr[i] is in between first
// and second then update second
else if (arr[i] > second &&
arr[i] != first)
{
second = arr[i];
}
}
if (second == INT_MIN)
cout << "There is no second largest"
"element\n" ;
else
cout << "The second largest element is "
<< second;
}

// Driver code
int main()
{
int arr[] = { 12, 35, 1, 10, 34, 1 };
int n = sizeof (arr) / sizeof (arr);

print2largest(arr, n);
return 0;
}

// This code is contributed by shivanisinghss2110``````

## Java

``````// JAVA Code for Find Second largest
// element in an array
class GFG {

/* Function to print the second largest
elements */
public static void print2largest( int arr[], int arr_size)
{
int i, first, second;

/* There should be atleast two elements */
if (arr_size < 2 ) {
System.out.print( " Invalid Input " );
return ;
}

first = second = Integer.MIN_VALUE;
for (i = 0 ; i < arr_size; i++) {
/* If current element is smaller than
first then update both first and second */
if (arr[i] > first) {
second = first;
first = arr[i];
}

/* If arr[i] is in between first and
second then update second  */
else if (arr[i] > second && arr[i] != first)
second = arr[i];
}

if (second == Integer.MIN_VALUE)
System.out.print( "There is no second largest"
+ " element\n" );
else
System.out.print( "The second largest element"
+ " is " + second);
}

/* Driver program to test above function */
public static void main(String[] args)
{
int arr[] = { 12 , 35 , 1 , 10 , 34 , 1 };
int n = arr.length;
print2largest(arr, n);
}
}
// This code is contributed by Arnav Kr. Mandal.``````

## Python3

``````# Python program to
# find second largest
# element in an array

# Function to print the
# second largest elements
def print2largest(arr, arr_size):

# There should be atleast
# two elements
if (arr_size < 2 ):

print ( " Invalid Input " )
return

first = second = - 2147483648
for i in range (arr_size):

# If current element is
# smaller than first
# then update both
# first and second
if (arr[i] > first):

second = first
first = arr[i]

# If arr[i] is in
# between first and
# second then update second
elif (arr[i] > second and arr[i] ! = first):
second = arr[i]

if (second = = - 2147483648 ):
print ( "There is no second largest element" )
else :
print ( "The second largest element is" , second)

# Driver program to test
# above function
arr = [ 12 , 35 , 1 , 10 , 34 , 1 ]
n = len (arr)

print2largest(arr, n)

# This code is contributed
# by Anant Agarwal.``````

## C#

``````// C# Code for Find Second largest
// element in an array
using System;

class GFG {

// Function to print the
// second largest elements
public static void print2largest( int [] arr, int arr_size)
{
int i, first, second;

// There should be atleast two elements
if (arr_size < 2) {
Console.WriteLine( " Invalid Input " );
return ;
}

first = second = int .MinValue;
for (i = 0; i < arr_size; i++) {
// If current element is smaller than
// first then update both first and second
if (arr[i] > first) {
second = first;
first = arr[i];
}

// If arr[i] is in between first
// and second then update second
else if (arr[i] > second && arr[i] != first)
second = arr[i];
}

if (second == int .MinValue)
Console.Write( "There is no second largest"
+ " element\n" );
else
Console.Write( "The second largest element"
+ " is " + second);
}

// Driver Code
public static void Main(String[] args)
{
int [] arr = { 12, 35, 1, 10, 34, 1 };
int n = arr.Length;
print2largest(arr, n);
}
}

// This code is contributed by Parashar.``````

## 的PHP

``````<?php
// PHP program to find second largest
// element in an array

// Function to print the
// second largest elements
function print2largest( \$arr , \$arr_size )
{

// There should be atleast
// two elements
if ( \$arr_size < 2)
{
echo ( " Invalid Input " );
return ;
}

\$first = \$second = PHP_INT_MIN;
for ( \$i = 0; \$i < \$arr_size ; \$i ++)
{

// If current element is
// smaller than first
// then update both
// first and second
if ( \$arr [ \$i ] > \$first )
{
\$second = \$first ;
\$first = \$arr [ \$i ];
}

// If arr[i] is in
// between first and
// second then update
// second
else if ( \$arr [ \$i ] > \$second &&
\$arr [ \$i ] != \$first )
\$second = \$arr [ \$i ];
}
if ( \$second == PHP_INT_MIN)
echo ( "There is no second largest element\n" );
else
echo ( "The second largest element is " . \$second . "\n" );
}

// Driver Code
\$arr = array (12, 35, 1, 10, 34, 1);
\$n = sizeof( \$arr );
print2largest( \$arr , \$n );

// This code is contributed by Ajit.
?>``````

``The second largest element is 34``

• 时间复杂度：上)。
只需遍历数组。
• 辅助空间：O(1)。
由于不需要额外的空间。 