Wie kann man den Intersection-Algorithmus optimieren?
Frontend
/** * Es ist notwendig, eine asynchrone Funktion zu schreiben, * die "schläft" für die angegebene Anzahl von Millisekunden, * und dann erfolgreich endet */ function sleep(duration) { } // Beispiel const startTime = Date.now(); console.log("Schlaf beginnt..."); sleep(2000).then(() => { console.log("Aufgewacht nach 2 Sekunden!"); console.log("Verstrichene Zeit: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Aufgewacht nach 1 Sekunde!"); console.log("Verstrichene Zeit: ", Date.now() - startTime); });
Es gibt einen Baum, auf dem Eichhörnchen und Krähen sitzen. Es ist notwendig, eine Funktion zu schreiben, die alle Eichhörnchen im Baum findet und ihre Namen zurückgibt. Erwartetes Ergebnis: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
/** * Implementieren Sie die Methode times für ein numerisches Objekt. * Die Funktion sollte einen Callback akzeptieren und ihn * die angegebene Anzahl von Malen mit dem aktuellen Iterationsindex aufrufen. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Beispiele console.clear(); (3).times(console.log) // 0 // 1 // 2
Wie lange arbeiten Sie schon im Unternehmen?
/* Zwei sortierte Listen mit Intervallen der Online-Präsenz von Benutzern während des Tages werden gegeben. Der Beginn des Intervalls ist strikt kleiner als das Ende. Es ist erforderlich, die Intervalle zu berechnen, in denen beide Benutzer online waren. Die Intervalle sind in Stunden angegeben, wobei Stunden von 0 bis 24 möglich sind. */ Schnittstelle( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] Schnittstelle( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function schnittstelle(benutzer1, benutzer2) { // dein Code hier }
Schreiben Sie die Funktion strjoin ohne Verwendung von Rest-Parametern neu, stattdessen unter Verwendung des arguments-Objekts.
/** * Es ist notwendig, eine Funktion strjoin zu schreiben, * die Strings durch einen Trenner verbindet. */ function strjoin() { // Code hier } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'
/* Es sind drei Codeabschnitte gegeben. Schreiben Sie das Ergebnis jedes console.log. */ var n = 1; function f(n) { n = 3; } f(n); console.log(n); // ?? // ---------------- var obj = { a: 1 }; function f1(o) { o.a = 5; } f1(obj); console.log(obj); // ?? // ---------------- var obj = { a: 1 }; function f2(o) { o = { hello: 1 }; } f2(obj);
Wie ändern sich die asymptotische Komplexität und der Speicherverbrauch bei der Aufgabe camelCase → snake_case, wenn das Ergebnis durch Verkettung von Strings anstelle eines Zeichenarrays erstellt wird?
// Es ist notwendig, die Methode groupBy zu implementieren, die die Standardmethoden der Arrays erweitert. // Die Methode sollte eine gruppierte Version des Arrays zurückgeben - ein Objekt, // in dem jeder Schlüssel das Ergebnis der Ausführung der übergebenen Funktion fn(arr[i]) ist, // und jeder Wert ein Array ist, das alle Elemente des ursprünglichen Arrays mit diesem Schlüssel enthält. // Code hier // Beispiel 1 const array1 = [ { id: 1 }, { id: 1 }, { id: 2 } ]; const fn = (item) => item.id; console.log(array1.groupBy(fn)); // { // 1: [{ id: 1 }, { id : 1 }], // 2: [{ id: 2 }] // } // Beispiel 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Beispiel 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }
// Es wird eine Zeichenkette gegeben, die aus lateinischen Buchstaben, Leerzeichen und Satzzeichen besteht. // Eine Zeichenkette heißt Pangramm, wenn sie mindestens einmal jeden der 26 Buchstaben enthält. Bestimmen Sie, ob die Zeichenkette ein Pangramm ist. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // dein Code hier } console.log(isPangram(`A pangram or holoalphabetic sentence is a using every letter of a given alphabet at least once.`)); // => console.log(isPangram('Waltz, bad nymph, for quick jigs vex.'))
Im Prototyp des Verkaufnetzwerks für Werbung ist der Verkauf von Werbeflächen wie folgt organisiert: Käufer nennen im Voraus ihren Preis, und für jeden Werbeplatz antworten sie, ob sie ihn kaufen möchten oder nicht. Es ist notwendig, eine Funktion zu implementieren, die vor dem Verkauf eines Werbeplatzes die Zustimmung oder Ablehnung der Käufer mit dem höchsten Gebot abwartet und dann den Werbeplatz an den Käufer mit dem höchsten Gebot unter denjenigen verkauft, die zugestimmt haben. Die Antwort der Funktion sollte so schnell wie möglich erfolgen. Sie sollte den Index des Käufers zurückgeben. Beispiele: Käufer bieten Preise 1, 5, 10 Der Käufer mit Angebot 10 hat abgelehnt Der Käufer mit Angebot 1 hat zugestimmt // Wir warten noch, da der Käufer mit Angebot 5 noch antworten könnte Der Käufer mit Angebot 5 hat zugestimmt // Wir wählen den Käufer mit Angebot 5 ------------ Käufer bieten Preise 1, 5, 10 Der Käufer mit Angebot 10 hat abgelehnt Der Käufer mit Angebot 5 hat zugestimmt // Wir warten nicht auf die Antwort des Käufers mit Angebot 1 - er wird definitiv nicht ausgewählt ------------ Käufer bieten Preise 1, 2 Der Käufer mit Angebot 1 hat abgelehnt Der Käufer mit Angebot 2 hat abgelehnt // Wir wählen keinen Käufer type Buyer = { price: number, accepts: () => Promise<boolean>, } async function bestBuyer(buyers) { const sorted = buyers.map((buyer, index) => ({buyer, index})) .sort((a, b) => a.buyer.price - b.buyer.price); const promise = sorted.map(({buyer}) => buyer.accepts()); for (let i = 0; i < sorted.length; i++) { const accepted = await promise[i]; if (accepted) { return sorted[i].index; } } if (await buyers[0].accepts()) { return 0; } return -1; }
// und jeder Wert ist ein Array, das alle Elemente des ursprünglichen Arrays mit diesem Schlüssel enthält. // Code hier // Beispiel 1 const array1 = [ { id: 1 }, { id: 1 }, { id: 2 } ]; const fn = (item) => item.id; console.log(array1.groupBy(fn)); // { // 1: [{ id: 1 }, { id: 1 }], // 2: [{ id: 2 }] // } // Beispiel 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));
Schreiben Sie eine Funktion tries(n), die die Funktion aus bis zu n Mal aufruft: Gibt das erste erfolgreiche Ergebnis zurück, und wenn alle Versuche fehlschlagen, wirft sie den letzten Fehler.
Warum kann man für groupBy keine Pfeilfunktion verwenden? Was wird this in der Pfeilfunktion sein?
Warum wird for...of in TypeScript rot hervorgehoben, während der normale for nicht?
Welche Einschränkungen hat die rekursive Baum traversal? Worin unterscheidet sich die Tiefensuche (DFS) von der Breitensuche (BFS)? Wie kann man eine Baum traversal ohne Rekursion implementieren?
/* Es ist notwendig, die Methode intersection zu implementieren, die die Standardmethoden von Mengen (Set) erweitert. Die Methode nimmt eine andere Menge als Eingabe und gibt eine neue Menge zurück, die die Schnittmenge der ursprünglichen Menge und der übergebenen Menge ist, d.h., enthält nur die Elemente, die in beiden Mengen vorhanden sind. */ // dein Code const set1 = new Set([1, 2, 3, 4]); const set2 = new Set([3, 4, 5, 6, 7, 8]); console.log(...set1.intersection(set2)) // 3 4 --- Set.prototype.intersection = function (set2) { const result = new Set(); for(const value of this) { if (set2.has(value)) result.add(value); } return result; } const set1 = new Set([1, 2, 3, 4]); const set2 = new Set([3, 4, 5, 6, 7, 8]); console.log(...set1.intersection(set2)) // 3 4
function any(promises) { // dein Code hier }