• 6 odgovora
  • 5.541 pregleda
Broj različitih elemenata niza 14.05.2008. u 13:12 · pre 224 meseci #1
Nisam dugo radio sa javom, a trebam da rešim jedan banalan zadatak.
Treba da se napravi funkcija koja određuje broj različitih elemenata nekog celobrojnog niza.
Ideja mi je bila da napravim jedan dinamički niz i jednu for petlju koja će da prolazi kroz sve elemente zadatog niza.
Ako ne nađe element u novom nizu, da proširi niz i doda taj element i na kraju da ispišem koliko elemenata ima novi niz i to je broj tih različitih elemenata niza.
Kako se prave dinamički nizovi u javi?
Znao bih zadatak da rešim pomoću kolekcija, ali bih hteo da se to odradi školski.
Dinamički niz bih mogao da pravim tako što bih uzeo taj novi niz, pa napravim temp čija je veličina novi.lenght + 1, kopiram vrednosti iz novog u temp, novi stavim na null da ga pokupi GC, i onda kažem da je novi = temp

Dajte mi neko elegantno rešenje
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Broj različitih elemenata niza 14.05.2008. u 13:59 · pre 224 meseci #3
Zadatak je za srednju školu tako da ne verujem da može da se koristi Util klasa.
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Broj različitih elemenata niza 14.05.2008. u 14:19 · pre 224 meseci #4
Citat:
Pharos: Zadatak je za srednju školu tako da ne verujem da može da se koristi Util klasa.


U tom slucaju verovatno ni sort ne moze da prodje :) u principu da se sortira niz, a onda samo jednom prodje kroz niz i tada lako mozes da izbrojis razlicite. A ovako ako ni to ne moze, nemoj se zezati da prosirujes niz svako malo, vec odma napravi duzinu istu kao i originalni, cisto da nemas kopiranje niza svako malo.
Potpis
http://speedy-order.com
Re: Broj različitih elemenata niza 14.05.2008. u 20:03 · pre 224 meseci #5
Veoma elegantno rešenje.
Hvala!
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Broj različitih elemenata niza 20.05.2008. u 01:45 · pre 224 meseci #6
Citat:
Pharos
Treba da se napravi funkcija koja određuje broj različitih elemenata nekog celobrojnog niza.


Code:

//napravio bih svoju klasu koja se zove Niz i u njoj definisao potrebnu metodu koju kasnije mozes pozvati u nekoj drugoj metodi ili main metodi.
class Niz
{
    int tekBrElemenata;
    int[] nizElemenata;
    
    public Niz(int duzina)
    {
        nizElemenata = new int[duzina];
        tekBrElemenata = 0;
    }
//ovo je potreban metoda. Objasnjenje u nastavku...
            public int brojRazlicitih()
    {
        int brojRazlicitih = tekBrElemenata;
        for(int i = 0; i < tekBrElemenata - 1; i++)
        {
            for(int j = i + 1; j < tekBrElemenata; j++)
            {
                if(nizElemenata[j] == nizElemenata[i])
                {
                    brojRazlicitih--;
                }
            }
        }
        return brojRazlicitih;
    }
}


Koristio sam promenljivu tekBrElemenata, koja vodi racuna o tome koliko elemenata ima u nizu (posto, realno, niz i ne mora da bude pun). Kao pocetnu pretpostavku sam uzeo da se svi elementi niza razlikuju. Ideja je da kada metoda nadje dva ista elementa u nizu, brojRazlicitih se smanji za jedan. Na taj nacin cemo, nakon poredjenja, dobiti broj razlicitih elemenata u nizu.
Nadam se da je dovoljno elegantno. ;)
Pozdrav. :)
Re: Broj različitih elemenata niza 20.05.2008. u 14:32 · pre 224 meseci #7
Ne svidja mi se ovo gornje resenje iz prostog razloga jer mu je kompleksnost izvrsavanja O(n^2) sto je smrt. Bolje uzeti sortirati niz recimo preko Quick sorta koji ima slozenost O(n*log(n)) i uraditi jedan prolaz kroz petlju i izbrojati iste, tada su svi isti elementi jedan pored drugog.

Ali opet ako pricamo o praski HashSet i vozi misko.
Potpis
http://speedy-order.com
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme