Как найти второе максимальное число в массиве

Tried to googled it but with no luck.
How can I find the second maximum number in an array with the smallest complexity?

code OR idea will be much help.

I can loop through an array and look for the maximum number
after that, I have the maximum number and then loop the array again to find the second the same way.

But for sure it is not efficient.

asked Feb 11, 2013 at 10:38

E.Meir's user avatar

4

Answer in C# :

static void Main(string[] args)
        {
            //let us define array and vars
            var arr = new int[]{ 100, -3, 95,100,95, 177,-5,-4,177,101 };

            int biggest =0, secondBiggest=0;
            for (int i = 0; i < arr.Length; ++i)
                {
                int arrItem = arr[i];
                if(arrItem > biggest)
                {
                    secondBiggest = biggest; //always store the prev value of biggest 
                                             //to second biggest...
                    biggest = arrItem;
                 }
                else if (arrItem > secondBiggest && arrItem < biggest) //if in our 
                 //iteration we will find a number that is bigger than secondBiggest and smaller than biggest 
                   secondBiggest = arrItem;
            }

            Console.WriteLine($"Biggest Number:{biggest}, SecondBiggestNumber: 
                              {secondBiggest}");
            Console.ReadLine(); //make program wait
        }

Output : Biggest Number:177, SecondBiggestNumber:101

answered Nov 20, 2018 at 16:49

Eran Peled's user avatar

Eran PeledEran Peled

7575 silver badges6 bronze badges

public static int F(int[] array)
{
    array = array.OrderByDescending(c => c).Distinct().ToArray();
    switch (array.Count())
    {
        case 0:
            return -1;
        case 1:
            return array[0];
    }
    return array[1];
}

answered Aug 13, 2014 at 0:12

Haithem KAROUI's user avatar

Haithem KAROUIHaithem KAROUI

1,5034 gold badges17 silver badges39 bronze badges

 static void Main(string[] args)
    {
        int[] myArray = new int[] { 0, 11, 2, 15, 16, 8, 16 ,8,15};
        int Smallest = myArray.Min();
        int Largest = myArray.Max();
        foreach (int i in myArray)
        {
            if(i>Smallest && i<Largest)
            {
                Smallest=i;
            }
        }
        System.Console.WriteLine(Smallest);
        Console.ReadLine();   
    }

This will work even if you have reputation of items in an array

answered Mar 14, 2018 at 4:49

Pradeep Venkat's user avatar

           int[] arr = {-10, -3, -3, -6};
           int h = int.MinValue, m = int.MinValue;

                    foreach (var t in arr)
                    {
                        if (t == h || t == m)
                            continue;
                        if (t > h)
                        {                            
                            m = h;
                            h = t;
                        }
                        else if(t > m )
                        {                            
                            m = t;
                        }

                    }

            Console.WriteLine("High: {0} 2nd High: {1}", h, m);
                   //or,
            m = arr.OrderByDescending(i => i).Distinct().Skip(1).First();

            Console.WriteLine("High: {0} 2nd High: {1}", h, m);

answered Oct 29, 2018 at 6:25

nahid's user avatar

nahidnahid

8110 bronze badges

2

/* we can use recursion */
var counter = 0;
     findSecondMax = (arr)=> {

        let max = Math.max(...arr);
        counter++;
        return counter == 1 ? findSecondMax(arr.slice(0,arr.indexOf(max)).concat(arr.slice(arr.indexOf(max)+1))) : max;
    }

    console.log(findSecondMax([1,5,2,3,0]))

answered May 31, 2019 at 20:43

deepak_pal's user avatar

deepak_paldeepak_pal

1591 silver badge5 bronze badges

static void Main(string[] args){
    int[] arr = new int[5];
    int i, j,k;
    Console.WriteLine("Enter Array");

    for (i = 0; i < 5; i++) {
        Console.Write("element - {0} : ", i);
        arr[i] = Convert.ToInt32(Console.ReadLine());
    }

    Console.Write("nElements in array are: ");
    j=arr[0];
    k=j;

    for (i = 1; i < 5; i++) {
        if (j < arr[i])
        {
            if(j>k)
            {
                k=j;
            }
            j=arr[i];
        }  
    }

    Console.WriteLine("First Greatest element: "+ j);
    Console.WriteLine("Second Greatest element: "+ k);
    Console.Write("n");
}

41 72 6c's user avatar

41 72 6c

1,5905 gold badges17 silver badges29 bronze badges

answered Aug 23, 2019 at 7:31

UmeshDixit's user avatar

UmeshDixitUmeshDixit

71 silver badge4 bronze badges

int max = 0;
int secondmax = 0;
int[] arr = { 2, 11, 15, 1, 7, 99, 6, 85, 4 };

for (int r = 0; r < arr.Length; r++)
{
    if (max < arr[r])
    {
        max = arr[r];
    }
}

for (int r = 0; r < arr.Length; r++)
{
    if (secondmax < arr[r] && arr[r] < max)
    {
        secondmax = arr[r];
    }
}

Console.WriteLine(max);
Console.WriteLine(secondmax);
Console.Read();

Josef's user avatar

Josef

2,7492 gold badges21 silver badges23 bronze badges

answered Jun 3, 2021 at 7:49

Shahab Adnan's user avatar

Python 36>=

def sec_max(array: list) -> int:
_max_: int = max(array)
second: int = 0
for element in array:
    if second < element < _max_:
        second = element
    else:
        continue
return second

answered Jan 16, 2022 at 18:16

Amine Mohamed's user avatar

Using below code we can find out second highest number, even array contains multiple max numbers

// int[] myArray = { 25, 25, 5, 20, 50, 23, 10 };
    public static int GetSecondHighestNumberForUniqueNumbers(int[] numbers)
    {
        int highestNumber = 0, Seconhight = 0;
        List<int> numberList = new List<int>();
        for (int i = 0; i < numbers.Length; i++)
        {
            //For loop should move forward only for unique items
            if (numberList.Contains(numbers[i]))
                continue;
            else
                numberList.Add(numbers[i]);

            //find higest number
            if (highestNumber < numbers[i])
            {
                Seconhight = highestNumber;
                highestNumber = numbers[i];
            } //find second highest number
            else if (Seconhight < numbers[i])
            {
                Seconhight = numbers[i];
            }
        }

answered Apr 17, 2022 at 11:04

Rajendar Manda's user avatar

It’s not like that your structure is a tree…It’s just a simple array, right?

The best solution is to sort the array. And depending on descending or ascending, display the second or the 2nd last element respectively.

The other alternative is to use some inbuilt methods, to get the initial max. Pop that element, and then search for the max again. Don’t know C#, so can’t give the direct code.

answered Feb 11, 2013 at 10:42

Pratik Bothra's user avatar

Pratik BothraPratik Bothra

2,6322 gold badges29 silver badges44 bronze badges

1

You’d want to sort the numbers, then just take the second largest. Here’s a snippet without any consideration of efficiency:

var numbers = new int[] { 3, 5, 1, 5, 4 };
var result=numbers.OrderByDescending(x=>x).Distinct().Skip(1).First();

answered Feb 11, 2013 at 10:44

Dmitry Ledentsov's user avatar

This isn’t too bad:

int[] myArray = new int[] { 0, 1, 2, 3, 13, 8, 5 };

var secondMax =
    myArray.Skip(2).Aggregate(
            myArray.Take(2).OrderByDescending(x => x).AsEnumerable(),
            (a, x) => a.Concat(new [] { x }).OrderByDescending(y => y).Take(2))
        .Skip(1)
        .First();

It’s fairly low on complexity as it only every sorts a maximum of three elements

answered Nov 14, 2015 at 6:48

Enigmativity's user avatar

EnigmativityEnigmativity

112k11 gold badges89 silver badges172 bronze badges

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int size;
            Console.WriteLine("Enter the size of array");
            size = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Enter the element of array");
            int[] arr = new int[size];
            for (int i = 0; i < size; i++)
            {
                arr[i] = Convert.ToInt32(Console.ReadLine());
            }
            int length = arr.Length;
            Program program = new Program();
            program.SeconadLargestValue(arr, length);
        }

        private void SeconadLargestValue(int[] arr, int length)
        {
            int maxValue = 0;
            int secondMaxValue = 0;
            for (int i = 0; i < length; i++)
            {
                if (arr[i] > maxValue)
                {
                    secondMaxValue = maxValue;
                    maxValue = arr[i];
                }
                else if(arr[i] > secondMaxValue)
                {
                    secondMaxValue = arr[i];
                }
            }
            Console.WriteLine("First Largest number :"+maxValue);
            Console.WriteLine("Second Largest number :"+secondMaxValue);
            Console.ReadLine();
        }   
    }
}

Basheer AL-MOMANI's user avatar

answered Jul 27, 2015 at 7:01

vikas_cool's user avatar

1

My solution below.

    class Program
    {
      static void Main(string[] args)
        {
        Program pg = new Program();
        Console.WriteLine("*****************************Program to Find 2nd Highest and 2nd lowest from set of values.**************************");
        Console.WriteLine("Please enter the comma seperated numbers : ");
        string[] val = Console.ReadLine().Split(',');
        int[] inval = Array.ConvertAll(val, int.Parse); // Converts Array from one type to other in single line  or Following line
        // val.Select(int.Parse)
        Array.Sort(inval);
        Console.WriteLine("2nd Highest is : {0} n 2nd Lowest is : {1}", pg.Return2ndHighest(inval), pg.Return2ndLowest(inval));
        Console.ReadLine();

        }


        //Method to get the 2nd lowest and 2nd highest from list of integers ex 1000,20,-10,40,100,200,400

        public  int Return2ndHighest(int[] values)
        {
           if (values.Length >= 2)
              return values[values.Length - 2];
           else
              return values[0];
         }

         public  int Return2ndLowest(int[] values)
         {
              if (values.Length > 2)
                  return values[1];
              else
                  return values[0];
          }

     }

answered Nov 28, 2016 at 7:11

Kiran Kumar's user avatar

1

I am giving solution that’s in JavaScript, it takes o(n/2) complexity to find the highest and second highest number.
here is the working Fiddler Link

    var num=[1020215,2000,35,2,54546,456,2,2345,24,545,132,5469,25653,0,2315648978523];
var j=num.length-1;
var firstHighest=0,seoncdHighest=0;
num[0] >num[num.length-1]?(firstHighest=num[0],seoncdHighest=num[num.length-1]):(firstHighest=num[num.length-1],   seoncdHighest=num[0]);
j--;
for(var i=1;i<=num.length/2;i++,j--)
{
   if(num[i] < num[j] )
   {
          if(firstHighest < num[j]){
          seoncdHighest=firstHighest;
           firstHighest= num[j];
          }
           else if(seoncdHighest < num[j] ) {
               seoncdHighest= num[j];

           }
   }
   else {
       if(firstHighest < num[i])
       {
           seoncdHighest=firstHighest;
           firstHighest= num[i];

       }
       else if(seoncdHighest < num[i] ) {
            seoncdHighest= num[i];

       }
   }

}   

answered Nov 4, 2015 at 15:04

Praveen M P's user avatar

Praveen M PPraveen M P

11.2k7 gold badges33 silver badges41 bronze badges

Sort the array and take the second to last value?

answered Feb 11, 2013 at 10:41

Captain Kenpachi's user avatar

Captain KenpachiCaptain Kenpachi

6,9407 gold badges47 silver badges68 bronze badges

1

 var result = (from elements in inputElements
    orderby elements descending
    select elements).Distinct().Skip(1).Take(1);
 return result.FirstOrDefault();

QuantumLicht's user avatar

QuantumLicht

2,1033 gold badges23 silver badges32 bronze badges

answered Sep 11, 2015 at 21:25

Gaurav Bhushan's user avatar

1

namespace FindSecondLargestNumber
{
    class Program
    {
        static void Main(string[] args)
        {
            int max=0;
            int smax=0;
            int i;
            int[] a = new int[20];
            Console.WriteLine("enter the size of the array");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("elements");
            for (i = 0; i < n; i++)
            {
                a[i] = int.Parse(Console.ReadLine());

            }
            for (i = 0; i < n; i++)
            {
                if ( a[i]>max)
                {
                    smax = max;
                    max= a[i];
                }
                else if(a[i]>smax)
                {
                    smax=a[i];
                }
            }
            Console.WriteLine("max:" + max);

            Console.WriteLine("second max:"+smax);
                Console.ReadLine();
        }
    }
}

Whit Waldo's user avatar

Whit Waldo

4,6544 gold badges45 silver badges68 bronze badges

answered Nov 4, 2016 at 17:19

ajay radam's user avatar

2

Помогите. Задача описана в первых комментариях кода.
Никак не могу понять, как найти два максимальных элемента массива и их индекс.
Например, массив у нас пусть будет {10, -2, 3, 9, 7, 6, 2, -10, 9, 10}
Нужно чтобы показало элементы A[0] = 10 и A[9] = 10.

И ещё, поясните почему рандом постоянно генерирует одни и те же значения при компиляции.

// Задача: заполнить массив из 10 элементов случайными числами 
// в интервале [-10..10] и найти в нем 
// два максимальных элемента и их номера. 
#include <iostream>
#include <cstdlib>
using namespace std; 

// Функция, возвращает случайное число в заданном диапазоне [a,b].
int random (int min, int max)
{
    max++;
    return abs(rand()%(max-min))+min;
}


int main()
{
    const int N = 10;
    int A[N], i, element, first_max_element, second_max_element, random_number_is, iMAX1, iMAX2;
    
    cout<<"Enter 5 elements of array.nn";
    
    // Заполняем массив рандомными числами.
    for(i =0; i<N; i++)
    {
        random_number_is = random(-10,10);
        A[i] = {random_number_is};
        cout<<"Random A["<<i<<"]: "<< random_number_is<<"n";       
    }
    
    // Вычисляем первый максимальный элемент массива.
    first_max_element = A[0];
    iMAX1 = 0;
    for(i=0; i<N; i++)
    {
        if(A[i] > first_max_element)
        {
            first_max_element = A[i];
            iMAX1 = i;      
        }   
    }

    // Вычисляем второй максимальный элемент массива.
    second_max_element = A[0];
    iMAX2 = 0;
    for(i=0; i<N; i++)
    {
        if(A[i] > second_max_element && iMAX1 != iMAX2)
        {
            second_max_element = A[i];
            iMAX2 = i;      
        }
    }
    
    cout<<"nFirst max element of array is: "<<"A["<<iMAX1<<"]: "<<first_max_element;
    cout<<"nSecond max element of array is: "<<"A["<<iMAX2<<"]: "<<second_max_element;
}

Паскаль. В линейном массиве найти два максимальных элемента.



Профи

(638),
закрыт



11 лет назад

Дополнен 11 лет назад

заполнение массива случайными числами

Дополнен 11 лет назад

нужна программа, я одно максимальное число нашла, а как найти сразу два максимальных элемента???

Руслан Синкевич

Профи

(787)


11 лет назад

Самый простой вариант – сделать второй проход, запомнив индекс максимального элемента, который был установлен в предыдущем проходе. При втором проходе просто пропустить его, выполнив проверку (к примеру if not i=2 then if a(i) > max then max:=a(i) )

var
max1, ind, max2, i : integer;
a : array [1..100] of integer;
begin
randomize;
for i:=1 to 100 do
a(i) := random(200);
max1 := a(i);
for i:=2 to 100 do
if a(i) > max1 then begin max1 := a(i); ind = i; end;
max2 := a(i);
for i:=2 to 100 do
if (a(i) > max2) and (i <> ind) then max2 := a(i);
writeln(‘max1=’, max1, ‘ max2=’, max2);
end.

Примерно так. Писал по памяти, нет под рукой компилятора. (i) замените на квадратные скобки.

dosmot dosmot

Мастер

(1739)


11 лет назад

После того, как одно максимальное число найдено, ищите второе точно так же, но при этом сравнивайте с первым (его занести в отдельную переменную) . Т. е. оно должно получиться больше всех чисел в массиве, кроме первого числа.

****** ******

Ученик

(199)


6 лет назад

код С#
________
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int[] initArr = new int[10000];
for (int i = 0; i < initArr.Length; i++)
{
initArr[i] = rnd.Next(-1000, 1000);
}

var outArr = Sort(initArr, 10);
}

private static int[] Sort(int[] array, int count)
{
int[] outArr = new int[count];
for (int i = 0; i < outArr.Length; i++)
{
int[] sorted = new int[count];
for (int j = 0; j < array.Length; j++)
{
if (!sorted.Contains(array[j]) && array[j] == array.Max())
{
outArr[i] = array[j];
array[j] = 0;
}
}
}

return (int[]) outArr.Reverse();
}
}
}

Выбирает из массива А массив максимальных чисел Б. В массиве А числа могут повторяться и поэтмоу также считаются максимальными. Требует доработки, т. к. 5 элементов из 10000 массива выберет за 6 сек. А если надо будет выбрать 1000?? Прикрути linq и возможно будет тебе праздник, но не факт, скорее всего еще медленее станет работать

ver6959

0 / 0 / 0

Регистрация: 14.07.2015

Сообщений: 4

1

Найти второй максимальный элемент в массиве

23.04.2017, 17:58. Показов 13329. Ответов 9

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте!

Подскажите, пожалуйста, как найти второй максимальный элемент в массиве?

Спасибо.

Моя попытка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int max=0, P, M;
 
        for (int i = 0; i < N; i++) {
          if (arr[i]>max) {
            max = arr[i];
            P=i;
          }
        }
 
        for (int i = 0; i < N; i++) {
          if (arr[i]>max) {
            if (i!=P) {
             max = arr[i];
             M=i;
            }
          }
        }



0



FreeYourMind

147 / 147 / 104

Регистрация: 13.11.2016

Сообщений: 557

23.04.2017, 20:37

2

Лучший ответ Сообщение было отмечено ver6959 как решение

Решение

Цитата
Сообщение от ver6959
Посмотреть сообщение

второй максимальный элемент

то есть в массиве есть второй элемент равный максимальному? или тот, что максимально близкий к мексимальному?

Добавлено через 37 минут
ver6959,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    const int n=8;
    int max = INT_MIN, p, v, arr[n];
    cout << "Fill in the array:" << endl;
    for (int i=0; i<n; i++)
    {
        cin >> arr[i];
        if (arr[i] > max)
        {
            max = arr[i];
            p = i;
        }
        if (arr[i]==max)
        {
            if (i!=p)
                v=i;
        }
    }
    system ("cls");
    cout << "Your array is" << endl;
    for (int i=0; i<n; i++)
    {
        cout << arr[i] << 't';
    }
    cout << endl;
    cout << p+1 <<endl;
    cout << v+1 << endl;
    system("pause");
    return 0;
}



1



повар1

783 / 590 / 317

Регистрация: 24.02.2017

Сообщений: 2,087

23.04.2017, 21:36

3

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream.h>
 
int main()
{
  int max=0, mas[10]={5,1,8,11,2,10,11,3,9,10};
 
  for(int i=0;i<10;i++)
    if(max<mas[i])
     max=mas[i];
 
   for(int i=0;i<10;i++)
     if(max==mas[i])
     cout<<max<<" pri i = "<<i<<"n";
 
system("pause>NUL");
    return 0;
}



0



0 / 0 / 0

Регистрация: 14.07.2015

Сообщений: 4

23.04.2017, 21:44

 [ТС]

4

Второй элемент, который равен максимальному.

Добавлено через 2 минуты
А если в массиве будет 3 максимальных элемента, но запомнить индекс нужно именно второго? По Вашей программе ведь запомнится индекс последнего максимального элемента, разве нет?



0



повар1

783 / 590 / 317

Регистрация: 24.02.2017

Сообщений: 2,087

23.04.2017, 21:54

5

Добавь счетчик количества выводов элементов массива

C++
1
 if(max==mas[i] && t<2)



1



0 / 0 / 0

Регистрация: 14.07.2015

Сообщений: 4

23.04.2017, 21:56

 [ТС]

6

второй элемент равный максимальному



0



повар1

783 / 590 / 317

Регистрация: 24.02.2017

Сообщений: 2,087

23.04.2017, 21:57

7

C++
1
2
3
4
5
6
7
8
9
10
11
12
 int max=0, t=0, mas[10]={5,1,8,11,11,10,11,3,9,10};
 
  for(int i=0;i<10;i++)
    if(max<mas[i])
     max=mas[i];
 
   for(int i=0;i<10;i++)
     if(max==mas[i] && t<2)
     {
     cout<<max<<" pri i = "<<i<<"n";
      t++;
      }



0



yxelan

4 / 4 / 6

Регистрация: 08.01.2012

Сообщений: 27

23.04.2017, 22:45

8

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include<iostream>
#include<clocale>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "russian");
 
    const int n = 5;
    int arr[n] = { 2,1,5,6,3 };
    int x = 0, y = 0;
 
//первое решение------------------------------------------------------------------------
    for (int i = 0; i < n; i++)
    {
        for (int j = i ; j < n; j++)
        {
            if (arr[i] < arr[j] && arr[i] > arr[x])
            {
                x = j;
                i = j;
            }
            else if (arr[i] > arr[j] && arr[i] > arr[x])
            {
                x = i;
            }
        }
    }
    cout << "В массиве под номером " << x+1 << 
        " находится максимальный элемент массива со значением равным " << arr[x] << endl;
 
    for (int i = 0; i < n; i++)
    {
        for (int j = i; j < n; j++)
        {
            if (arr[i] < arr[j] && arr[i] > arr[y] && j != x)
            {
                y = j;
                i = j;
            }
            else if (arr[i] > arr[j] && arr[i] > arr[y] && i != x)
            {
                y = i;
            }
        }
    }
    cout << "В массиве под номером " << y + 1 <<
        " находится второй максимальный элемент массива со значением равным " << arr[y] << endl << endl;
 
 
//второе решение--------------------------------------------------------------------------------
    int max = arr[0], max2 = arr[0];
    int p, m;
    for (int i = 0; i < n; i++)
    {
        if (arr[i] > max)
        {
            p = i;
            max = arr[i];
        }
    }
    cout <<"Номер элемента в массиве "<< p+1 << 
        ", максимальное значение равно: " << max << endl;
    for (int i = 0; i < n; i++)
    {
        if (arr[i] > max2 && arr[i] != max)
        {
            m = i;
            max2 = arr[i];
        }
    }
    cout << "Номер элемента в массиве " << m + 1 << 
        ", второе максимальное значение равно: " << max2 << endl << endl;
 
    system("pause");
    return 0;
}



0



Dani

1404 / 646 / 135

Регистрация: 11.08.2011

Сообщений: 2,299

Записей в блоге: 2

23.04.2017, 23:05

9

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main()
{
    int arr[] = { 1, 5, 4, 2, 3, 5, 4, 3, 2, 4, 6, 8, 98, 7, 5, 4, 2, 4 };
    std::nth_element(std::begin(arr), std::end(arr) - 2, std::end(arr));
    std::cout << *(std::end(arr) - 2) << std::endl;
    return 0;
}



0



147 / 147 / 104

Регистрация: 13.11.2016

Сообщений: 557

24.04.2017, 19:21

10

ver6959, сделайте счетчик.. или сделайте отдельный цикл для вывода массива а для поиска элементов другой и там в ифе (который ищет второй индекс) делайте break;



0



Когда в списке много элементов, нам может понадобиться найти максимальный или минимальный элемент, и Python значительно упростил нам задачу.

В этой статье мы расскажем, как можно найти второе по величине число в списке Python с помощью следующих принципов:

  1. Сортировка списка и печать предпоследнего числа списка.
  2. Удаление максимального элемента.
  3. Нахождение максимального элемента.
  4. Перемещение по списку.

Давайте разберем первый подход.

Сортировка списка и печать предпоследнего числа

Следующая программа показывает, как это можно сделать на Python.

Пример –

 
#program to find the second largest number of list 
# declaring the list 
list_val = [20, 30, 40, 25, 10] 
# sorting the list 
list_val.sort() 
#displaying the second last element of the list 
print("The second largest element of the list is:", list_val[-2]) 

Выход:

The second largest element of the list is: 30 

Объяснение –

  1. Мы объявили список, из которого хотим изъять второй элемент, начиная с конца списка.
  2. После этого мы использовали метод сортировки, чтобы все элементы нашего списка располагались в порядке возрастания.
  3. Теперь мы используем отрицательную индексацию, так как второе по величине число будет на предпоследней позиции.

Второй метод – получить второй по величине элемент списка, удалив максимальный элемент.

Давайте посмотрим, как мы можем это сделать.

Удаление максимального элемента

Пример –

 
#program to find the second largest number of list 
 
# declaring the list 
list_val = [20, 30, 40, 25, 10] 
 
# new_list is a set of list1 
res_list = set(list_val) 
 
#removing the maximum element 
res_list.remove(max(res_list)) 
 
#printing the second largest element  
print(max(res_list)) 

Выход:

30 

Объяснение –

Давайте разберемся, что мы сделали в вышеуказанной программе:

  1. Мы объявили список, из которого хотим изъять второй по величине элемент.
  2. После этого мы использовали метод set, чтобы взять все уникальные элементы списка.
  3. Теперь мы используем max(), чтобы получить максимальное значение из списка, а затем удаляем его.
  4. После этого мы печатаем максимум результирующего списка, который даст нам второе по величине число.

В третьем методе мы будем использовать цикл for и и с его помощью найдем второй максимум из списка.

Нахождение максимального элемента

Пример –

 
# declaring empty list 
list_val = [] 
 
# user provides the number of elements to be added in the list 
num_list = int(input("Enter number of elements in list: ")) 
 
 
for i in range(1, num_list + 1): 
 element = int(input("Enter the elements: ")) 
 list_val.append(element) 
 
 
# sort the list 
list_val.sort() 
 
# print second largest element 
print("Second largest element is:", list_val[-2]) 

Выход:

Enter number of elements in list: 5 
 
Enter the elements: 10 
 
Enter the elements: 20 
 
Enter the elements: 30 
 
Enter the elements: 40 
 
Enter the elements: 50 
The second largest element is: 40 

Объяснение –

  1. Мы объявили пустой список, в который будем вставлять элементы.
  2. После этого мы просим пользователя предоставить нам количество элементов, которые мы хотели бы добавить в наш список.
  3. Используем метод сортировки, чтобы все элементы нашего списка располагались в порядке возрастания.
  4. Теперь мы применим отрицательную индексацию, так как второе по величине число будет на второй последней позиции.

Перемещение по списку

В последней программе мы пройдемся по списку, чтобы найти наибольшее число, а затем с помощью условных операторов найдем второе по величине число в списке.

Следующая программа это проиллюстрирует:

 
def calc_largest(arr): 
 second_largest = arr[0] 
 largest_val = arr[0] 
 for i in range(len(arr)): 
 if arr[i] > largest_val: 
 largest_val = arr[i] 
 
 for i in range(len(arr)): 
 if arr[i] > second_largest and arr[i] != largest_val: 
 second_largest = arr[i] 
 
 return second_largest 
print(calc_largest([20, 30, 40, 25, 10])) 

Выход:

30 

Объяснение –

Давайте разберемся, что мы сделали в вышеуказанной программе:

  1. Первый шаг – создать функцию, которая проверяет наибольшее число из списка, просматривая его.
  2. В следующем цикле for мы снова просматриваем список для поиска наибольшего числа, но на этот раз исключаем предыдущий, так как здесь наша цель – найти вторую по величине функцию.
  3. Наконец, мы передаем наш список в функцию.

Итак, в этой статье у нас была возможность подумать нестандартно и открыть для себя несколько новых способов разработки логики поиска второго по величине числа в Python.

Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.

Добавить комментарий