Heim >Web-Frontend >js-Tutorial >Typescript Coding Chronicles: Zunehmende Triplett-Folge
Bei einem gegebenen ganzzahligen Array „nums“ wird „true“ zurückgegeben, wenn ein Tripel von Indizes (i, j, k) existiert, sodass i < j < k und nums[i] < nums[j] < Zahlen[k]. Wenn keine solchen Indizes vorhanden sind, geben Sie false zurück.
Können Sie eine Lösung implementieren, die in O(n)-Zeitkomplexität und O(1)-Raumkomplexität läuft?
Um dieses Problem effizient zu lösen, müssen wir die bisher kleinsten und zweitkleinsten Werte im Auge behalten. Wenn wir einen dritten Wert finden, der größer als der zweitkleinste ist, dann haben wir ein steigendes Triplett gefunden.
Die Brute-Force-Lösung besteht darin, alle möglichen Triplets zu überprüfen, um zu sehen, ob es eines gibt, das die Bedingung i < erfüllt. j < k und nums[i] < nums[j] < Zahlen[k]. Dieser Ansatz hat eine zeitliche Komplexität von O(n^3), was für große Eingabegrößen nicht effizient ist.
function increasingTripletBruteForce(nums: number[]): boolean { const n = nums.length; for (let i = 0; i < n - 2; i++) { for (let j = i + 1; j < n - 1; j++) { for (let k = j + 1; k < n; k++) { if (nums[i] < nums[j] && nums[j] < nums[k]) { return true; } } } } return false; }
Die Brute-Force-Lösung ist nicht effizient und nicht für große Eingabegrößen geeignet.
Die optimierte Lösung besteht darin, das Array zu durchlaufen und dabei zwei Variablen, die erste und die zweite, beizubehalten, die den kleinsten und den zweitkleinsten bisher gefundenen Wert darstellen. Wenn wir einen Wert finden, der größer als Sekunde ist, geben wir true zurück.
function increasingTriplet(nums: number[]): boolean { let first = Infinity; let second = Infinity; for (let num of nums) { if (num <= first) { first = num; // smallest value } else if (num <= second) { second = num; // second smallest value } else { return true; // found a value greater than second smallest, thus an increasing triplet exists } } return false; }
console.log(increasingTripletBruteForce([1,2,3,4,5])); // true console.log(increasingTripletBruteForce([5,4,3,2,1])); // false console.log(increasingTripletBruteForce([2,1,5,0,4,6])); // true console.log(increasingTripletBruteForce([1,1,1,1,1])); // false console.log(increasingTripletBruteForce([1,2])); // false console.log(increasingTripletBruteForce([1,2,3])); // true console.log(increasingTripletBruteForce([1,5,0,4,1,3])); // true console.log(increasingTriplet([1,2,3,4,5])); // true console.log(increasingTriplet([5,4,3,2,1])); // false console.log(increasingTriplet([2,1,5,0,4,6])); // true console.log(increasingTriplet([1,1,1,1,1])); // false console.log(increasingTriplet([1,2])); // false console.log(increasingTriplet([1,2,3])); // true console.log(increasingTriplet([1,5,0,4,1,3])); // true
Subarray-Probleme:
Zwei-Zeiger-Technik:
In-Place-Algorithmen:
Durch das Üben solcher Probleme und Strategien können Sie Ihre Problemlösungsfähigkeiten verbessern und besser auf verschiedene Programmierherausforderungen vorbereitet sein.
Das obige ist der detaillierte Inhalt vonTypescript Coding Chronicles: Zunehmende Triplett-Folge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!