• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spoj zwraca limit time extended {c#}

Object Storage Arubacloud
0 głosów
317 wizyt
pytanie zadane 1 kwietnia 2022 w SPOJ przez chrystian Gaduła (4,780 p.)
zmienione kategorie 1 kwietnia 2022 przez ScriptyChris

zadanie Arraysub  zwraca mi time limit exceeded a   jak poprwawić pogram by nie zwracał błedu 

using System;
using System.Linq;

namespace ConsoleApp17
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            int n = Convert.ToInt32((Console.ReadLine()));

            int k;

            int val = 0;

            int[] arr = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
            k = Convert.ToInt32((Console.ReadLine()));

            for (int i = 0; i < n - k + 1; i++)
            {
                val = arr[i];
                for (int j = i; j < i + k; j++)
                {
                    if (val < arr[j])
                    {
                        val = arr[j];
                    }
                }

                Console.Write(val + " ");
            }
        }
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 2 kwietnia 2022 przez Whistleroosh Maniak (56,980 p.)
wybrane 5 kwietnia 2022 przez chrystian
 
Najlepsza
Twój algorytm działa teraz w złożoności O(nk), więc to zdecydowanie za wolno. Możesz spróbować rozwiązać to szybciej korzystając z seta albo kolejki monotonicznej.
komentarz 5 kwietnia 2022 przez chrystian Gaduła (4,780 p.)

coś takiego pomoże czy nie


            C(9,new int[]{1,2,3,1,4,5,2,3,6},3);
        

        private static void C(int n, int[] arr, int k)

        {
            int val = 0;
            for (int i = 0; i < n - k + 1; i++)
            {
                val = arr[i];
                for (int j = i; j < i + k; j++)
                {
                    if (val < arr[j])
                    {
                        val = arr[j];
                    }
                }

                Console.Write(val + " ");
            }
        }

 

komentarz 5 kwietnia 2022 przez Whistleroosh Maniak (56,980 p.)
Niestety nie. To wciąż jest O(nk)
komentarz 8 kwietnia 2022 przez chrystian Gaduła (4,780 p.)
@Whistleroosh podeślesz jakiś example bym wiedział o co chodzi
komentarz 8 kwietnia 2022 przez Whistleroosh Maniak (56,980 p.)

Musisz albo skorzystać ze struktury danych set. Która jest już nawet zaimplementowana w c#. Albo z kolejki monotonicznej

komentarz 8 kwietnia 2022 przez chrystian Gaduła (4,780 p.)

@Whistleroosh dobrze myslę 

     HashSet<int> oddNumbers = new HashSet<int>(n);

i później

for oddnumver,add

i

array copy

 

komentarz 8 kwietnia 2022 przez Whistleroosh Maniak (56,980 p.)
Nie bardzo rozumiem o co chodzi w drugiej i trzeciej linijce. Ale uświadomiłem sobie, że źle Ci powiedziałem, musisz przecież trzymać wielokrotne wystąpienia tej samej liczby, więc nie możesz korzystać z seta a musisz skorzystać z multiseta

Podobne pytania

0 głosów
2 odpowiedzi 956 wizyt
pytanie zadane 5 września 2017 w C i C++ przez J0ker Pasjonat (15,400 p.)
0 głosów
2 odpowiedzi 824 wizyt
pytanie zadane 17 sierpnia 2018 w SPOJ przez Marcin Rasta Pawłows Użytkownik (600 p.)
0 głosów
0 odpowiedzi 239 wizyt
pytanie zadane 24 sierpnia 2020 w SPOJ przez magda_19 Gaduła (3,080 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...