Kezdőoldal » Számítástechnika » Programozás » Elakadtam egy HackerRanks...

Elakadtam egy HackerRanks feladatban, hol lehet a hibám? (bármely C szerű nyelvben)

Figyelt kérdés

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. :)


2020. jan. 28. 15:13
1 2 3 4
 11/37 anonim ***** válasza:
0%

:D :D :D :D

"programozók" :D :D :D

2020. jan. 28. 16:36
Hasznos számodra ez a válasz?
 12/37 anonim ***** válasza:
40%

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

2020. jan. 28. 16:41
Hasznos számodra ez a válasz?
 13/37 A kérdező kommentje:

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.

2020. jan. 28. 16:41
 14/37 A kérdező kommentje:

# 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

2020. jan. 28. 16:45
 15/37 anonim ***** válasza:
64%

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á.

2020. jan. 28. 17:03
Hasznos számodra ez a válasz?
 16/37 A kérdező kommentje:

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. :(

2020. jan. 28. 17:05
 17/37 anonim ***** válasza:
83%

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.

2020. jan. 28. 17:32
Hasznos számodra ez a válasz?
 18/37 A kérdező kommentje:

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.

2020. jan. 28. 17:45
 19/37 anonim ***** válasza:
13%

"A gond az, hogy most per pill azt se tudom, mi az a számosság, utána kellene néznem."


Egyetem.

2020. jan. 28. 17:46
Hasznos számodra ez a válasz?
 20/37 anonim ***** válasza:
77%
Az, hogy hányszor fordul elő a szám. Ha 3-asból van 5db, akkor 5 a számossága.
2020. jan. 28. 17:46
Hasznos számodra ez a válasz?
1 2 3 4

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!