5. Top Integers Exercise: Arrays - C# Fundamentals - май 2020
Има ли по удачна функция за тази задача от All() за бързо решение
using System;
using System.Collections.Generic;
using System.Linq;
namespace dey_of_week
{
class Program
{
static void Main(string[] args)
{
List<int> arr = Console.ReadLine().Split().Select(int.Parse).ToList();
while (arr.Count != 0)
{
if (arr.All(x => x <= arr[0]))
{
int element = arr[0];
arr.RemoveAt(0);
if (arr.All(x => x < element))
{
Console.Write(element + " ");
}
}
else
{
arr.RemoveAt(0);
}
}
}
}
}
Хубаво и кратко решение, но за съжаление и то страда от проблемите, които съм описал в поста си.
Представете си следните входни данни:
9 8 ... 1 0
10 числа, всичките отговарящи на условието.
В резултат, на всяка итерация ще се обхождат всички оставащи числа (за да се намери най-голямото) и после списъка се модифицира, като се изтрива първото число, (ако не говорим за LinkedList, това е най-скъпата възможна модификация).
10 числа не са много, но входните данни може и да са:
1000000 999999 ... 1 0
Разбира се, в Judge няма подобен тест, а и в този курс не се налага да се пишат оптимизирани решения за да минат.
Подозирам, че колегата @Ankoun1 под "бързо решение" има предвид такова, което е по-кратко като код, но все пак оставям отговора си за колегите, които се интересуват и от оптимизирано откъм бързодействие и/или използвани системни ресурси такова.
@MartinBG,
разбира се, идеити ви са много добри и... не само за тази задача! Практически и други колеги
са ми споменавали да се ползват оптимални решения предвид огромни входни данни. Ученето е нужно...!
Поздрави,
Иван :)