Как найти индекс наибольшего числа в массиве

var arr = [ 1, 3, 2, 3, 6, 2 ];
var maxIndex = arr.indexOf( Math.max.apply(null, arr)); // 4, считается от 0
  1. Math.max() возвращает наибольшее значение из аргументов.
  2. чтобы передать массив вместо списка, используется apply()
  3. получив само наибольшее значение, остаётся найти его индекс в массиве через метод массива indexOf().

Не очень эффективно, т.к. фактически массив перебирается дважды: в поиске максимума и в поиске индекса. Можно сделать за один проход, запоминая вместе с найденным максимальным значением его позицию:

var arr = [ 1, 3, 2, 3, 6, 2 ];

function index_max(arr) {
  var i, maxV, maxP;
  for( i = 0; i < arr.length; i++) {
    if( typeof maxV === "undefined" || arr[i] > maxV ) {
      maxV = arr[i];
      maxP = i;
    }
  }
  
  return maxP;
}

index_max(arr) // 4

  • Редакция Кодкампа

17 авг. 2022 г.
читать 1 мин


Вы можете использовать следующий синтаксис, чтобы найти индекс максимального значения списка в Python:

#find max value in list
max_value = max(list_name)

#find index of max value in list 
max_index = list_name. index (max_value)

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1: поиск индекса максимального значения в списке

Следующий код показывает, как найти максимальное значение в списке вместе с индексом максимального значения:

#define list of numbers
x = [9, 3, 22, 7, 15, 16, 8, 8, 5, 2]

#find max value in list
max_value = max(x)

#find index of max value in list
max_index = x. index (max_value)

#display max value
print(max_value)

22

#display index of max value
print(max_index)

2

Максимальное значение в списке равно 22 , и мы видим, что оно расположено в списке со значением индекса 2 .

Примечание. В Python значения индекса начинаются с 0.

Пример 2: поиск индекса максимального значения в списке со связями

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

#define list of numbers with multiple max values
x = [9, 3, 22, 7, 15, 16, 8, 8, 5, 22]

#find max value in list
max_value = max(x)

#find indices of max values in list
indices = [index for index, val in enumerate(x) if val == max_value]

#display max value
print(max_value)

22

#display indices of max value
print(indices)

[2, 9]

Максимальное значение в списке равно 22 , и мы видим, что оно встречается при значениях индекса 2 и 9 в списке.

Дополнительные ресурсы

Как заархивировать два списка в Python
Как преобразовать список в DataFrame в Python
Как построить гистограмму из списка данных в Python

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given an array arr[] consisting of N(> 2) integers, the task is to find the peak index of the array. If the array doesn’t contain any peak index, then print -1.

    The peak index, say idx, of the given array arr[] consisting of N integers is defined as:

    • 0 < idx < N – 1
    • arr[0] < arr[1] < arr[2] < …. < arr[idx] < …. < arr[N – 2] < arr[N – 1]

    Examples:

    Input: arr[] = {0, 1, 0}
    Output: 1
    Explanation: In the given array at index 1, arr[0] < arr[1] and arr[1] > arr[2]. Since index 1 satisfies the given condition, therefore 1 is a peak index of the array.

    Input: arr[] = {3, 5, 5, 4, 3, 2, 1}
    Output: -1

    Naive Approach: The simplest approach is to traverse the array and check for each index, say idx, over the range [1, N – 2] whether the index idx can be the peak index of the array or not. This can be done by checking if all elements to the left and right of this index idx must be in strictly increasing and strictly decreasing order. After checking for all the indices, if there exists any such index, then print that index. Otherwise, print “-1”

    Time Complexity: O(N2)
    Auxiliary Space: O(1)

    Efficient Approach: The above approach can also be optimized based on the fact that the peak index will exist only if the array contains a strictly increasing prefix followed by a strictly decreasing suffix. 
    Follow the steps below to solve the problem:

    • Initialize two variables, say ans, to store the index of the peak element of the array.
    • Traverse the given array over the range of indices [1, N – 2], using a variable, say i. If the value of arr[i] is greater than or equal to arr[i + 1], then update ans as i and break out of the loop.
    • If the value of ans is 0 or (N – 1), then print “-1”, as there exists no such peak index for the given array.
    • Now, traverse the given array over the range [ans, N – 2] using the variable i and if the value of arr[i] is less than or equal to arr[i + 1], then break out of the loop.
    • After completing the above steps, if the value of i is (N – 1) then print the value of ans as the resultant peak index. Otherwise, print “-1” as there exists no such peak index for the given array.

    Below is the implementation of the above approach:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    int peakIndex(int arr[], int N)

    {

        if (N < 3)

            return -1;

        int i = 0;

        while (i + 1 < N)

        {

            if (arr[i + 1] < arr[i] ||

                arr[i] == arr[i + 1])

                break;

            i++;

        }

        if (i == 0 || i == N - 1)

            return -1;

        int ans = i;

        while (i < N - 1)

        {

            if (arr[i] < arr[i + 1] ||

                arr[i] == arr[i + 1])

                break;

            i++;

        }

        if (i == N - 1)

            return ans;

        return -1;

    }

    int main()

    {

        int arr[] = { 0, 1, 0 };

        int N = sizeof(arr) / sizeof(arr[0]);

        cout << peakIndex(arr, N) << "n";

        return 0;

    }

    Java

    import java.io.*;

    import java.util.*;

    class GFG {

        public static int peakIndex(int[] arr)

        {

            int N = arr.length;

            if (arr.length < 3)

                return -1;

            int i = 0;

            while (i + 1 < N) {

                if (arr[i + 1] < arr[i]

                    || arr[i] == arr[i + 1])

                    break;

                i++;

            }

            if (i == 0 || i == N - 1)

                return -1;

            int ans = i;

            while (i < N - 1) {

                if (arr[i] < arr[i + 1]

                    || arr[i] == arr[i + 1])

                    break;

                i++;

            }

            if (i == N - 1)

                return ans;

            return -1;

        }

        public static void main(String[] args)

        {

            int[] arr = { 0, 1, 0 };

            System.out.println(peakIndex(arr));

        }

    }

    Python3

    def peakIndex(arr):

        N = len(arr)

        if (len(arr) < 3):

            return -1

        i = 0

        while (i + 1 < N):

            if (arr[i + 1] < arr[i] or

                arr[i] == arr[i + 1]):

                break

            i += 1

        if (i == 0 or i == N - 1):

            return -1

        ans = i

        while (i < N - 1):

            if (arr[i] < arr[i + 1] or

                arr[i] == arr[i + 1]):

                break

            i += 1

        if (i == N - 1):

            return ans

        return -1

    if __name__ == '__main__':

        arr = [0, 1, 0]

        print(peakIndex(arr))

    C#

    using System;

    using System.Collections.Generic;

    class GFG{

    public static int peakIndex(int[] arr)

    {

        int N = arr.Length;

        if (arr.Length < 3)

            return -1;

        int i = 0;

        while (i + 1 < N)

        {

            if (arr[i + 1] < arr[i] ||

                arr[i] == arr[i + 1])

                break;

            i++;

        }

        if (i == 0 || i == N - 1)

            return -1;

        int ans = i;

        while (i < N - 1)

        {

            if (arr[i] < arr[i + 1] ||

                arr[i] == arr[i + 1])

                break;

            i++;

        }

        if (i == N - 1)

            return ans;

        return -1;

    }

    static public void Main()

    {

        int[] arr = { 0, 1, 0 };

        Console.WriteLine(peakIndex(arr));

    }

    }

    Javascript

    <script>

        function peakIndex(arr)

        {

            var N = arr.length;

            if (arr.length < 3)

                return -1;

            var i = 0;

            while (i + 1 < N) {

                if (arr[i + 1] < arr[i] || arr[i] == arr[i + 1])

                    break;

                i++;

            }

            if (i == 0 || i == N - 1)

                return -1;

            var ans = i;

            while (i < N - 1) {

                if (arr[i] < arr[i + 1] || arr[i] == arr[i + 1])

                    break;

                i++;

            }

            if (i == N - 1)

                return ans;

            return -1;

        }

            var arr = [ 0, 1, 0 ];

            document.write(peakIndex(arr));

    </script>

    Time Complexity: O(N)
    Auxiliary Space: O(1)

    Last Updated :
    03 May, 2021

    Like Article

    Save Article

    3 / 2 / 2

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

    Сообщений: 265

    1

    Найти индекс наибольшего числа в массиве

    28.10.2015, 13:20. Показов 9696. Ответов 7


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

    1. Вводим неск чисел.Найти индекс наибольшего числа в массиве. Если таких чисел несколько найти индекс первого из них.



    0



    Programming

    Эксперт

    94731 / 64177 / 26122

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

    Сообщений: 116,782

    28.10.2015, 13:20

    Ответы с готовыми решениями:

    Найти индекс наибольшего числа в массиве
    Необходимо решить 3 задачи. Времени разбираться, читать книгу по C# уже нет, да и болезнь не дает…

    В одномерном массиве А(10) найти значение и индекс наибольшего из отрицательных элементов
    Помогите, пожалуйста, написать программу на Паскаль без random.

    Как в массиве найти повторяющиеся числа, взять каждого того повторяющегося числа индекс
    Как в массиве найти повторяющиеся числа, взять каждого того повторяющегося числа индекс массива в…

    Найти индекс числа в многомерном массиве
    Задача стоит такая, мы генерируем массив, N на M, заполняем случайными числами, дальше приступаем к…

    7

    Shakalaka

    Эксперт HTML/CSS

    653 / 556 / 322

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

    Сообщений: 1,374

    28.10.2015, 14:15

    2

    Javascript
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var numbers = [43, 222, 222, 77, 22, 77];
     
    function getIndex(arr){
        var greatest = arr[0];
        var index = 0;
        arr.forEach(function(item,i){
        if(item > greatest)
            greatest = item, index = i;
        });
        return index;
    }



    1



    3 / 2 / 2

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

    Сообщений: 265

    28.10.2015, 21:31

     [ТС]

    3

    чет не работает в нотпаде



    0



    Padimanskas

    Superposition

    950 / 615 / 256

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

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

    29.10.2015, 01:04

    5

    Детский сад

    Javascript
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    var max = 0;
    var id = 0;
    var arr = [1,2,7,4,5,7,4,3];
     
    for(var i = 0; i < arr.length; i++){
      if(arr[i] > max){
           max = arr[i];
           id = i;  
      }
    }
     
    alert('max=' + max + '  id=' + id);



    0



    Fedor Vlasenko

    Эксперт PHP

    934 / 692 / 235

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

    Сообщений: 1,848

    29.10.2015, 01:14

    6

    Javascript
    1
    2
    3
    4
    
    var arr = [43, 222, 222, 77, 22, 77];
    var max = Math.max.apply(null, arr);
    var idxMax = arr.indexOf(max);
    alert(idxMax);



    0



    Superposition

    950 / 615 / 256

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

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

    29.10.2015, 01:23

    7

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

    var max = Math.max.apply(null, arr);

    Вот препод посмотрит в листинг и спросит -“А дзе ты эта узял, Вася? Напересдачу давай пока”



    0



    Эксперт PHP

    934 / 692 / 235

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

    Сообщений: 1,848

    29.10.2015, 01:28

    8

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

    Вот препод посмотрит в листинг и спросит -“А дзе ты эта узял, Вася? Напересдачу давай пока”

    А он, вот документация, в примере приведена работа с массивами
    Math.max



    0



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

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

    Одномерный массив
    Для нахождения индекса минимального элемента в одномерном массиве можно воспользоваться методом IndexOf класса Array, например:

    C#:

    int [] numbers = {20, 13, 562, 1, 900, 78};
    //1. Находим минимальное значение
    int minVal = numbers.Min(); //1
    //2. Находим индекс
    int indexMin = Array.IndexOf(numbers, minVal);
    //Результат: 3

    Этот же результат можно получить и с помощью метода FindIndex всё того же класса Array, например:

    C#:

    int indexMin = Array.FindIndex(numbers, x => x == minVal);

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

    C#:

    int [] numbers = { 20, 1, 562, 10, 900, 78, 1 };
    int minVal = 1;
    int lastIndexMin = Array.FindLastIndex(numbers,x => x == minVal);
    //Результат: 6

    Многомерный массив
    С помощью методов: IndexOf и FindIndex можно найти индекс элемента только в одномерном массиве. В многомерном массиве индекс элемента будет иметь значения вида: array[0, 0] и найти его можно, например, с помощью обычного цикла for.

    C#:

    int[,] numbers = { { 100,30,6,8,18,17 }, { 2,3,61,69,8,56 } };
    //1. Находим минимальный элемент
    IEnumerableint> colNumbs = numbers.Castint>();
    int minVal = colNumbs.Min(); //2
    //2. Находим индекс минимального элемента
    for (int i = 0; i < numbers.GetLength(0); i++)
    {
    for (int j = 0; j < numbers.GetLength(1); j++)
    {
    if (numbers[i, j].Equals(minVal))
    {
    Console.Write(i + "-" + j);
    //выход из цикла
    i = numbers.GetLength(0);
    break;
    }
    }
    }
    //Результат: 1-0

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

    C#:

    int[,] numbers = { { 100,2,6,8,18,17 }, { 2,3,61,69,8,56 } };
    int minVal = 2;
    if (numbers[i, j].Equals(minVal))
    {
    Console.WriteLine(i + "-" + j);
    }
    //Результат: 0-1, 1-0

    Jagged массив
    В Jagged массиве каждый элемент представляет собой отдельный массив. Чтобы найти индекс самого минимального значения в массиве также воспользуемся циклом for.

    C#:

    int[][] numbers = { new int [] {12,13,6,7,8},
    new int [] {99,4,6,3,90},
    new int [] {11,22,77,55}};
    //1. Находим минимальный элемент
    int minVal = numbers.SelectMany(x => x).Min();
    //находим его индекс
    for (int i = 0; i < numbers.Length; i++)
    {
    for (int j = 0; j < numbers.Length; j++)
    {
    if (numbers[j].Equals(minVal))
    {
    Console.Write(i + "-" + j);
    //выход из цикла
    i = numbers.Length;
    break;
    }
    }
    }
    //Результат: 1-3

    Как найти индекс максимального значения?
    Всё то же самое, только сначала нужно найти максимальный элемент массива.

    Читайте также:

    • Включаем нумерацию строк в Visual Studio 2013
    • Как подписаться на событие?
    • C# Как скопировать файл?

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