Geben Sie bei einem gegebenen ganzzahligen Array nums eine Array-Antwort zurück, sodass Antwort[i] gleich dem Produkt aller Elemente von nums außer nums[i] ist.
Das Produkt eines beliebigen Präfixes oder Suffixes von Zahlen passt garantiert in eine 32-Bit-Ganzzahl.
Sie müssen einen Algorithmus schreiben, der in O(n)-Zeit und ohne Verwendung der Divisionsoperation ausgeführt wird.
Können Sie das Problem in O(1) mit zusätzlicher Raumkomplexität lösen? (Das Ausgabearray zählt nicht als zusätzlicher Speicherplatz für die Raumkomplexitätsanalyse.)
Um dieses Problem zu lösen, müssen wir das Produkt aller Elemente außer dem aktuellen Element berechnen, ohne die Divisionsoperation zu verwenden. Dies kann durch zwei Durchgänge über das Array erfolgen:
Wir können zwei Arrays verwenden, um die Präfix- und Suffixprodukte zu speichern und sie dann zu multiplizieren, um das Endergebnis zu erhalten.
function productExceptSelf(nums: number[]): number[] { const n = nums.length; const prefixProducts = new Array(n).fill(1); const suffixProducts = new Array(n).fill(1); const result = new Array(n).fill(1); // Compute prefix products for (let i = 1; i = 0; i--) { suffixProducts[i] = suffixProducts[i 1] * nums[i 1]; } // Compute the result by multiplying prefix and suffix products for (let i = 0; iZeitkomplexitätsanalyse:
Die Basislösung funktioniert gut, benötigt aber zusätzlichen Platz zum Speichern von Präfix- und Suffixprodukten.
Wir können die Lösung optimieren, um O(1) zusätzlichen Speicherplatz zu nutzen, indem wir das Ausgabearray zunächst zum Speichern von Präfixprodukten verwenden und es dann direkt ändern, um die Suffixprodukte einzuschließen.
function productExceptSelfOptimized(nums: number[]): number[] { const n = nums.length; const result = new Array(n).fill(1); // Compute prefix products in the result array for (let i = 1; i = 0; i--) { result[i] = result[i] * suffixProduct; suffixProduct *= nums[i]; } return result; }
console.log(productExceptSelf([1,2,3,4])); // [24,12,8,6] console.log(productExceptSelf([-1,1,0,-3,3])); // [0,0,9,0,0] console.log(productExceptSelf([2,2,2,2])); // [8,8,8,8] console.log(productExceptSelf([0,0])); // [0,0] console.log(productExceptSelf([5])); // This should not be a valid input as the minimum length is 2 console.log(productExceptSelf([1,2])); // [2, 1] console.log(productExceptSelfOptimized([1,2,3,4])); // [24,12,8,6] console.log(productExceptSelfOptimized([-1,1,0,-3,3])); // [0,0,9,0,0] console.log(productExceptSelfOptimized([2,2,2,2])); // [8,8,8,8] console.log(productExceptSelfOptimized([0,0])); // [0,0] console.log(productExceptSelfOptimized([5])); // This should not be a valid input as the minimum length is 2 console.log(productExceptSelfOptimized([1,2])); // [2, 1]
Präfix-Summen-Array:
In-Place-Algorithmen:
Array-Manipulation:
Durch das Üben solcher Probleme und Strategien können Sie Ihre Problemlösungsfähigkeiten verbessern und besser auf verschiedene Codierungsherausforderungen vorbereitet sein.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3