Как найти наибольшее, второе по величине число, самое низкое второе самое низкое число в данном массиве - PullRequest
1 голос
/ 10 июля 2010

Может кто-нибудь? Пожалуйста, скажите мне, как найти наибольшее, второе по величине число, самое низкое второе самое низкое число в данном массиве

var numbers = new[] {855,3,64,6,24,75,3,6,24,45};

Любой указатель и предложение будет действительно полезным.Спасибо

Ответы [ 10 ]

4 голосов
/ 07 июля 2014

Использование концепций Linq

var a = new int[] { 855, 3, 64, 6, 24, 75, 3, 6, 24, 45 };

var Max = a.Max(z => z);
var Min = a.Min( z => z);
var SMax = a.OrderByDescending(z=>z).Skip(1).First();
var SMin = a.OrderBy(z => z).Skip(1).First();
4 голосов
/ 10 июля 2010

Вы также можете попробовать это -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class secondHighestLowest : System.Web.UI.Page
{
    int[] arr = new int[10] { 45, 3, 64, 6, 24, 75, 3, 6, 24, 45 };

    protected void Page_Load(object sender, EventArgs e)
    {
        secondHighestLowestNumber();
        secoundLowestNumber();
    }

    private void secondHighestLowestNumber()
    {
        int firstHighestNumber = arr[0];
        int secondHighestNumber = arr[0];
        for(int i = 0; i<arr.Length; i++)
        {
            if (arr[i]>firstHighestNumber)
            {
                firstHighestNumber = arr[i];
            }
        }

        for (int x = 0; x < arr.Length; x++)
        {
            if (arr[x]>secondHighestNumber && firstHighestNumber!=arr[x])
            {
                secondHighestNumber = arr[x];
            }
        }

        Response.Write("secondHighestNumber---- " + secondHighestNumber + "</br>");
    }

    private void secoundLowestNumber()
    {
        int firstLowestNumber = arr[0];
        int secondLowestNumber = arr[0];
        for (int i = 0; i < arr.Length; i++)
        {
            if (arr[i] < firstLowestNumber)
            {
                firstLowestNumber = arr[i];
            }
        }

        for (int x = 0; x < arr.Length; x++)
        {
            if (arr[x] < secondLowestNumber && firstLowestNumber != arr[x])
            {
                secondLowestNumber = arr[x];
            }
        }

        Response.Write("secondLowestNumber---- " + secondLowestNumber + "</br>");
    }
}

Надеюсь, это полезно:)

4 голосов
/ 10 июля 2010

Предполагая, что у вас есть как минимум 2 элемента в массиве, вы можете использовать OrderBy() и ElementAt():

var numbers = new[] { 855, 3, 64, 6, 24, 75, 3, 6, 24, 45 };
var secondLowest = numbers.OrderBy(num => num).ElementAt(1);
var secondHighest = numbers.OrderBy(num => num).Reverse().ElementAt(1);

Получение самого высокого и самого низкогоэто проще и может быть сделано с использованием Max() и Min() LINQ методов.

var lowest = numbers.Min();
var highest = numbers.Max();

Если вы беспокоитесь о сложности, вы можете достичь лучшегорезультат с использованием Алгоритм выбора .С его помощью вы можете выполнять операции в O (n) сложности.

4 голосов
/ 10 июля 2010

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

Другой вариант - построить кучу, а затем выполнить удаление корня.3 раза (куча перестраивается после каждого удаления).

0 голосов
/ 02 ноября 2018

Вот простое решение, если ваш массив состоит как минимум из двух членов.

Для самого низкого числа в массиве.

              
 Array.Sort(new);

            string newNumber = string.Join(" ", new[0]);
            return newNumber;

Для второго наименьшего числа в массиве.

                Array.Sort(new);
                string newNumber = string.Join(" ", new[1]);
                return newNumber;

для наибольшего числа в массиве.

                    Array.Sort(new);
                    string newNumber = string.Join(" ", new[new.Length - 1]);
                    return newNumber;

Для второго по величине числа в массиве.

                        Array.Sort(new);
                        string newNumber = string.Join(" ", new[new.Length - 1]);
                        return newNumber;
0 голосов
/ 20 ноября 2016

Этот алгоритм применим даже при дублированной записи.

int[] intArrayInput= new int[] { 855, 3, 64, 6, 24, 75, 3, 6, 24, 45, 855 };

Использование сортировки:

Array.Sort(intArrayInput);
int intMax = intArrayInput[intInput.Length - 1];
int intLow = intArrayInput[0];

И используя LINQ:

int intSecondMax = intArrayInput.OrderByDescending(x => x).Distinct().Skip(1).First();
int intSecondLow = intArrayInput.OrderBy(x => x).Distinct().Skip(1).First();
0 голосов
/ 04 ноября 2016

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

static void Main(string[] args)
    {
        int[] Num =new int[] { 3, 4, 5, 6, 7, 0,99,105,55 };

        int temp;
        for(int a=0;a<Num.Length-1;a++)
        {
            for(int b=a+1;b<Num.Length;b++)
            {
                if(Num[a]>Num[b])
                {
                    temp = Num[a];
                    Num[a] = Num[b];
                    Num[b] = temp;
                }
            }

        }


        Console.WriteLine("Max value ="+Num[Num.Length-1]+"\nSecond largest Max value="+ Num[Num.Length - 2]+"\nMin value =" + Num[0] + "\nSecond smallest Min value=" + Num[1]);
        Console.WriteLine("\nPress to close");
        Console.ReadLine();
    }
0 голосов
/ 22 апреля 2016

Почему две петли, когда можно сделать в

        int[] myArray = new int[] { 2, 4, 3, 6, 9 };

        int max1 = 0;
        int max2 = 0;

        for (int i = 0; i < myArray.Length; i++)
        {
            if (myArray[i] > max1)
            {
                max2 = max1;
                max1 = myArray[i];

            }
            else
            {
                max2 = myArray[i];
            }
        }

        Console.WriteLine("first" + max1.ToString());
        Console.WriteLine("Second" + max2.ToString());
        Console.ReadKey();
0 голосов
/ 07 июля 2014
int[] myUnSortArray = { 1, 5, 8, 3, 10, 6, 19, 5, 4, 4 };

int[] SortedArray = (from number in myUnSortArray
                     orderby number ascending
                     select number).ToArray();

int highestValue = SortedArray.Max();
int SecondHighest = SortedArray.Last(m => m < highestValue);
0 голосов
/ 28 февраля 2013
        int[] i = new int[] { 4, 8, 1, 9, 2, 7, 3 };
        Array.Sort(i);
        Console.WriteLine("Highest number :" + i[i.Length-1]);
        Console.WriteLine("Second highest number :"+i[i.Length-2]);
        Console.WriteLine("Lowest number :" + i[i.Length-i.Length]);
        Console.WriteLine("Second Lowest number :" + i[i.Length -i.Length+1]);

        Output : Highest number : 9

                 Second highest number : 8

                 Lowest number : 1

                 Second Lowest number : 2
...