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

problem z zadaniem ROL ze spoja w jezyku Java

VPS Starter Arubacloud
0 głosów
245 wizyt
pytanie zadane 12 marca 2023 w SPOJ przez skyynet Początkujący (410 p.)

Siema,

Mam problem z zadaniem ROL w Javie, moim zdaniem powinno być wszystko ok, ale sędzia ze SPOJa się ze mną nie zgadza. Mógłby mi ktoś pomóc w znalezieniu błedu?

link do zadania:

https://pl.spoj.com/problems/PTROL/

import java.util.Scanner;

public class ROL {
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int t = input.nextInt();
        int size;
        int[] list;
        for(int i=0;i<t;i++)
        {
            size = input.nextInt();
            list = new int[size];
            for(int j=0;j<size;j++)
            {
                list[j] = input.nextInt();
            }
            for(int number : list)
            {
                if(number == list[0])
                    continue;
                else if(number == list[size-1])
                {
                    System.out.println(number + " " + list[0]);
                    break;
                }
                System.out.print(number+" ");
            }
        }
        input.close();
    }
}

 

2 odpowiedzi

+1 głos
odpowiedź 12 marca 2023 przez Great Stary wyjadacz (12,300 p.)

1

3 5 5 5

Zastanów się czemu pętla pomija więcej niż pierwszą iterację pętli:

if(number == list[0])
    continue;

Prostsze pominięcie wypisania pierwszego elementu:

for(int j = 1; j < size; j++)
{
    System.out.println(...)              
}
System.out.println() // [0]

Oczywiście możesz użyć pętli foreach, ale musisz zrobić to poprawnie (np. .stream().skip() / .subList()).

1
komentarz 12 marca 2023 przez Wiciorny Ekspert (269,120 p.)
co tu jest prostszego? :)  Niespełniony warunek nigdy się nie ewaluuje więc nie jest to problem, a forach jest wydajniejszy zdecydowanie jesli praca będzie wkonywana w równoległym środowisku.
1
komentarz 12 marca 2023 przez skyynet Początkujący (410 p.)

Bardzo dziękuje za pomoc faktycznie nie zwróciłem uwagi gdy pierwsza liczby z listy się powtarza

+1 głos
odpowiedź 12 marca 2023 przez Wiciorny Ekspert (269,120 p.)

Przemyśl to : 

 if(number == list[0])
                    continue;

jeśli któryś z elementów na liście będzie równy pierwszemu to się to pominie. 

Przykład  1,2,3,1,3 -> 4 element na liście będzie równy 1 == list[0] zostanie pominięty. 

Cykliczne przesunięcie możesz rozwiązać przemyślając 1 fakt, każdy element przesuwa się o indeks wcześniej więc tak naprawdę niewiele operacji jest Ci potrzebnych 

int[] arr = {1, 2, 3, 4, 5, 6, 7};
int n = arr.length;

// przesuń elementy cyklicznie o jedną pozycję w lewo
int temp = arr[0];
for (int i = 1; i < n; i++) {
    arr[i-1] = arr[i];
}
arr[n-1] = temp;

// wyświetl przesuniętą tablicę
for (int i = 0; i < n; i++) {
    System.out.print(arr[i] + " ");
}



 



 

1
komentarz 12 marca 2023 przez VBService Ekspert (251,210 p.)

Jako ciekawostka smiley

Bardzo lubię javascript, więc pomyślałem ...

const arr = [ 1, 2, 3, 4, 5, 6, 7 ];
arr.push(arr.shift());
// console.log(arr);


i czy da się w java ...  System.arraycopy [ 1 ] [ 2

int[] arr = {1, 2, 3, 4, 5, 6, 7};
int temp = arr[0];
System.arraycopy(arr, 1, arr, 0, arr.length - 1);
arr[arr.length - 1] = temp;


 

1
komentarz 12 marca 2023 przez Wiciorny Ekspert (269,120 p.)

Ilość operacji z o(n), rośnie w każdym twoim rozwiązaniu do n^2.. dlatego nie lubię "gotowych funkcji", jeśli ktoś  robi coś tak bo lubi dłubać to okej, ale z takim podejściem w projektach, potem nie ma co się dziwić, że u "mnie wolno działa". 
System array nie przejdzie na spokju 

Co ciekawe System.arraycopy jest używane przez  Arrays.copyOf
 

Benchmark                                          (SIZE)  Mode  Cnt        Score       Error  Units
ObjectsCopyBenchmark.arraysCopyOfBenchmark             10  avgt  100        8.535 ±     0.006  ns/op
ObjectsCopyBenchmark.arraysCopyOfBenchmark        1000000  avgt  100  2831316.981 ± 15956.082  ns/op
ObjectsCopyBenchmark.systemArrayCopyBenchmark          10  avgt  100        9.278 ±     0.005  ns/op
ObjectsCopyBenchmark.systemArrayCopyBenchmark     1000000  avgt  100  2826917.513 ± 15585.400  ns/op
PrimitivesCopyBenchmark.arraysCopyOfBenchmark          10  avgt  100        9.172 ±     0.008  ns/op
PrimitivesCopyBenchmark.arraysCopyOfBenchmark     1000000  avgt  100   476395.127 ±   310.189  ns/op
PrimitivesCopyBenchmark.systemArrayCopyBenchmark       10  avgt  100        8.952 ±     0.004  ns/op
PrimitivesCopyBenchmark.systemArrayCopyBenchmark  1000000  avgt  100   475088.291 ±   726.416  ns/op

ale dalej SPOJ bedzie miał z Systemem problem, tak mi się wydaje, chyba że zmienili podejście do spawdzania. 
Dodatkowo nie używałbym  metod korzystających z 

@HotSpotIntrinsicCandidate

JS niestety nie ma takich wad, tzn ma inne oczywiście jak każdy język, ale na JAVE bardzo trzeba uważać, szczególnie korzystająć z wbudowanych metod własnie, bo czasami w czeluściach mogą się dziać naprawdę przedzwine rzeczy 

Podobne pytania

0 głosów
0 odpowiedzi 126 wizyt
pytanie zadane 6 września 2020 w SPOJ przez magda_19 Gaduła (3,080 p.)
0 głosów
1 odpowiedź 203 wizyt
pytanie zadane 5 marca 2021 w SPOJ przez AbroX9 Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 516 wizyt
pytanie zadane 24 lipca 2018 w SPOJ przez ksareks Nowicjusz (140 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...