public static int compareSign(int[] a, int[] b) {
int count = 0;
int max_len = Math.min(a.length, b.length);
for (int i = 0; i < max_len; i++) {
if ((a[i] >> 31) + (b[i] >> 31) == -1) count++;
}
return count;
}
Du nimmst im Endeffekt als Parameter die beiden Arrays a und b. Ich habe die Aufgabe so verstanden, dass du jedes Paar also die Werte am gleichen Index der beiden Arrays vergleichen sollst, daher eine for-Schleife, wobei "i" genau dieser Index ist. "max_len" beschreibt die kleinere Länge der beiden Arrays, weil wenn ein Array größer ist, kannst du nur bis zum letzten Index des kleineren Arrays vergleichen (Math.min() ist eine Funktion, die den kleineren der beiden Werte zurückgibt) ... Um zu entscheiden, ob ein Wert ein negatives oder positives Vorzeichen hat, solltest du dir den Aufbau eines 32-Bit-Integers anschauen und verstehen wie das Vorzeichen gespeichert wird (Stichwort: Zweier-Komplement) ... Kurz zusammengefasst: Das vorderste Bit gibt das Vorzeichen an (1: negativ, 0: positiv) ... was ich gemacht habe, ist, dass ich mit >> die 31 hintersten Bits weggeschoben habe und damit nur noch das vorderste, also das Vorzeichenbit, betrachte (wenn die Zahl negativ ist, dann ist der interpretierte int-Wert = -1, sonst 0 ... 0-1 oder -1+0 == -1 --> zwei verschiedene Vorzeichen und somit count++ (hoffe es hat dir geholfen)
Schüler, Punkte: 270
Da gibt es viele Möglichkeiten. Ich denke, dass du auch erst beide shiften und dann mit XOR verknüpfen kannst, wobei die beiden Zahlen unterschiedliche Vorzeichen haben, wenn das Ergebnis der XOR-Operation ungleich 0 ist (also -1) ... Das kannst du mal ausprobieren.
─ daniel.kuenkel 2 Wochen hervielen Dank!
─ sayuri 2 Wochen herKann ich fragen, ob du Informatik studierst, oder welches Semester du gerade bist?
─ daniel.kuenkel 2 Wochen herja, klar bin im 3. Semester. Hast du Informatik studiert?
─ sayuri 2 Wochen herBin gerade noch in der 12. Klasse, aber dann werde ich auch Informatik studieren
─ daniel.kuenkel 2 Wochen hercool :) du kennst dich ja schon mit Java und so aus? Hast du es dir selber beigebracht? Wie lange machst du das?
─ sayuri 1 Woche, 6 Tage herJa ich programmiere schon seit ein paar Jahren und habe es mir selber durch Bücher, Videos usw. beigebracht. Das wichtigste ist, dass man selber viel programmiert, z.B. in Form von eigenen kleinen Projekten und das du dir Algorithmen und Datenstrukturen anschaust ... Das habe ich früher auch nie gemacht, aber das ist extrem wichtig!
─ daniel.kuenkel 1 Woche, 6 Tage herwie lange hast du gebraucht, bis du das Programmieren gelernt hast? Genau bei der Programmierung habe ich recht Mühe...
─ sayuri 1 Woche, 6 Tage herDas dauert schon recht lange meiner Meinung nach. So richtig angefangen habe ich mit Java, bin aber nicht weiter gekommen als irgendwelche if-Anweisungen. Dann habe ich mich intensiver mit objektorientierter Programmierung beschäftigt, wobei das allgemein für jedes Projekt am wichtigsten war (also nochmal Objektorientierung anschauen mit all seinen Bestandteilen wie Datenkapselung, Vererbung, Polymorphie usw.) und dann eben wie schon angesprochen Algorithmen und Datenstrukturen. Ich habe selber z.B. einfach eine Liste aus der Standard-Bibliothek benutzt, anstatt zu verstehen wie eine Liste funktioniert oder wie ich eine selber programmieren kann. Also ich kann dir 3 Dinge raten: Schau dir nochmal alle Konzepte deiner Programmiersprache an z.B. Java und auch wie sie mit den jeweiligen Schlüsselwörtern umgesetzt werden. Dann schau dir Objektorientierung an und als letztes Algorithmen und Datenstrukturen, wobei du z.B. auf Leetcode Aufgaben dazu lösen kannst ... das stärkt deine Problem-Solving-Kompetenz
─ daniel.kuenkel 1 Woche, 6 Tage hervielen herzlichen Dank, gibt bei Leetcode auch Lösungen, falls du nicht weiterkommst?
─ sayuri 1 Woche, 6 Tage herLeetcode ist krank ... Da gibt es Aufgaben unterteilt nach jeder Datenstruktur ... es gibt Aufgaben, die unterteilt sind nach Firmen, die diese Aufgaben in ihren Interviews gestellt haben (Google, Facebook usw) und es gibt zumindest für die meisten Aufgaben (in der kostenlosen Version) die Lösungen, welche auch Schritt für Schritt erklärt werden ... Das machen normalerweise Leute, die sich für ein Coding Interview bei FANG Unternehmen vorbereiten, also wird es dir sehr viel bringen!
─ daniel.kuenkel 1 Woche, 6 Tage herWarum ist Leetcode krank? woow cool!
─ sayuri 1 Woche, 6 Tage her"krank" im Sinne von "geil", dass es so eine Plattform gibt ... hat mir persönlich auch sehr geholfen
─ daniel.kuenkel 1 Woche, 6 Tage herachso, cool vielen herzlichen Dank!!!!! Man braucht sehr viel Geduld mit der Programmierung!!!!!! Manchmal benötige ich sooooooo lange bis ich etwas schnalle...
─ sayuri 1 Woche, 6 Tage herJa, das stimmt! Das Problem liegt halt bei den Unis. Ich habe beim KIT so eine Vorlesung gesehen über Programmierung. Die Dozentin liest es gefühlt runter wie ein Buch ... so ist es schwierig und man muss sich eigentlich 80% davon selbst beibringen!
─ daniel.kuenkel 1 Woche, 6 Tage herGenau, sie stellen jede Woche etwas vor und sagen, mach etwas und nächste Woche ein neues Thema und wenn du ein Problem so lange dran bist, dann kommst du irgends...
─ sayuri 1 Woche, 6 Tage her
Vielen Dank für deine ausführliche Antwort! Musst du nicht shiften und danach mit XOR vergleichen?
─ sayuri 2 Wochen her