Elakadtam egy HackerRanks feladatban, hol lehet a hibám? (bármely C szerű nyelvben)
HackerRanks, Picking numbers feladat. Nem konkrét interjúra vagy ilyesmire kell és nem iskolai feladat, az oldal email-ben küldte.
Given an array of integers, find and print the maximum number of integers you can select from the array such that the absolute difference between any two of the chosen integers is less than or equal to 1.
....
Sample Input 0
6 a hossza
4 6 5 3 3 1 a számok, nem feltétlenül rendezett, mint a mellékelt ábra is mutatja
Sample Output 0
3
https://pastebin (pont) com/ZAHk1W0F
Hol a hibám?
Ez C#, de nem muszáj ahhoz ragaszkodni, bármely C nyelvben megérteném a lényeget. :)
:D :D :D :D
"programozók" :D :D :D
a) Meg kell szamolni hany db van a szamokbol
4: 1db
6: 1db
5: 1db
3: 2db
1: 1db
b) Ebbol kivalasztod azt amelyikbol a legtobb van (2 db es a 3-as szam)
c) Utana meg kell vizsgalni a szomszedos szamokat. 3-as szomszedja a 2 es a 4. Itt 2-es nincs most, marad a 4-es, ebbol 1 db van
d) Ossze kell adni b) es c)-nel kapott db szamokat, azaz 2db + 1db
Masik pelda, mondjuk megszamolod hany db szam van mindegyikbol es ezt kapod:
2: 4db
6: 1db
5: 1db
3: 2db
1: 1db
2-esbol van a legtobb 4 db. 2-esnek ket szomszedja van 1 es 3, 1-bol van 1 db, 3-asbol van 2 db,
tehat vegeredmenyben 4 db + 2 db = 6 a legtobb integer ami kivalaszthato, ezek pedig: 2,2,2,2,3,3
Itt tartok:
https://pastebin (pont) com/HPcBSYCx
Ne lepődjetek meg, hogy átmentem C-re, abban jobban szeretek algoritmizálós feladatokat csinálni. :D
Úgyis elölről kezdtem az egészet.
# 10
Az igen, a Java-ban se stringet, se List-et nem lehet indexelni??
Amúgy nem semmi megoldás, "elvontabb" és elsőre meg se értettem.
Már nem azért, mert káoszos, mint az enyém eleinte, hanem nagyon absztrakt. Vagy hogy mondják. :D
Nem lehet, de a C#-hoz a Java legközelebbi olyan nyelv, amihez értek is, úgyhogy abban írtam.
Ha nem érted a logikát, akkor szólj és írok magyarázatot hozzá.
Mindegy, ilyen nagyon alapvető szinten értem a C szintaktikájú nyelveket, tanultam több-kevesebb Java-t, C, C++-t és alapvetően C#-os vagyok.
Csak meglepődtem, hogy nem lehet indexelni.
Nem értem a logikáját. :(
int max = 0;
Változó a végső eredménynek.
int[] arr = new int[101];
Ez egy lookup table. Mivel 0-tól 100-ig fordulhatnak elő a számok, ezért 101 elemű, hogy minden lehetséges értéknek legyen hely benne.
for (int i = 0; i < nums.size(); i++) {
Végig iterálunk a bemeneti listán
int num = nums.get(i);
num lesz az aktuális szám a bemeneti listából
arr[num]++;
A tömbben az adott számhoz tartozó index értékét növelem.
Tehát 3-as szám esetén az arr[3] értéke 1 lesz. Ha jön mégegy 3-as szám, akkor arr[3] értéke már 2 lesz és így tovább.
int leftCount = num > 0 ? arr[num - 1] : 0;
int rightCount = num < 100 ? arr[num + 1] : 0;
A megszorítás szerint a számok között maximum 1 lehet az értékbeli különbség, tehát szomszédosnak kell lenniük. Szóval ha az adott szám 3, akkor csak 2 és 4 lehet a másik szám. Ezek számossága ugye a tömbben egymás mellett helyezkedik el.
leftCount az aktuális számtól eggyel kisebb szám számossága, a rightCount pedig az eggyel nagyobbé.
Az első elemnél ugye nincs bal szomszéd, az utolsónál pedig nincs jobb, így ott alapból 0 a számosság.
max = Math.max(max, Math.max(arr[num] + leftCount, arr[num] + rightCount));
Megvan tehát az aktuális szám számossága, illetve az egyel kisebb és egyel nagyobb számok számossága is.
Nekünk a következő számosságokból kell a maximumot kiválasztani:
- aktuális + eggyel kisebb
- aktuális + eggyel nagyobb
- az eddig megtalált maximum
return max;
Vissza adjuk a végső maximumot.
Nem azt mondtam, hogy soronként. :D :D :D :D
A gond az, hogy most per pill azt se tudom, mi az a számosság, utána kellene néznem.
"A gond az, hogy most per pill azt se tudom, mi az a számosság, utána kellene néznem."
Egyetem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!