leetcode2967. Minimale Kosten für die Umwandlung eines Arrays in ein gleichwertiges Array

Artikelverzeichnis

Thema

Sie erhalten ein ganzzahliges Array nums der Länge n mit Indizes beginnend bei 0.

Sie können spezielle Operationen für Nums beliebig oft (oder 0 Mal) ausführen. Für jeden Spezialvorgang müssen Sie die folgenden Schritte der Reihe nach ausführen:

Wählen Sie einen Index i und eine positive ganze Zahl x aus dem Bereich [0, n - 1]. Addieren Sie |nums[i] - x| zu den Gesamtkosten. Ändern Sie
nums[i] in x. Wenn eine positive ganze Zahl aufrecht und rückwärts gleich gelesen wird, dann nennen wir die Zahl ein Palindrom. Beispielsweise
sind 121, 2552 und 65756 alle Palindrome, aber 24, 46 und 235 sind keine Palindrome.

Wenn alle Elemente in einem Array gleich einer ganzen Zahl y sind und y eine Palindromzahl kleiner als 109 ist, dann nennen wir das Array ein gleichwertiges Array.

Bitte geben Sie eine Ganzzahl zurück, die den minimalen Gesamtaufwand für die Umwandlung von Nums in ein gleiches Array darstellt, nachdem eine beliebige Anzahl spezieller Operationen ausgeführt wurde.

Beispiel 1:

Eingabe: nums = [1,2,3,4,5] Ausgabe: 6 Erläuterung: Wir können alle Elemente im Array in Palindromzahlen 3 umwandeln, um ein Array mit gleichen Zahlen zu erhalten, und das Array wird zu
[3,3,3 ,3, 3] 4 Spezialoperationen müssen zu einem Preis von |1 - 3| + |2 - 3| + |4 - 3| + |5 - 3| = 6 durchgeführt werden. Die Gesamtkosten für die Umwandlung aller Elemente in andere Palindrome ist größer als 6.

Beispiel 2:

Eingabe: nums = [10,12,13,14,15] Ausgabe: 11 Erläuterung: Wir können alle Elemente im Array in Palindromzahlen 11 umwandeln, um ein Array mit gleichen Zahlen zu erhalten, und das Array wird zu
[11,11,11 ,11, 11] Es müssen 5 Spezialoperationen mit einem Aufwand von |10 - 11| + |12 - 11| + |13 - 11| + |
14 - 11| + |15 - 11| = 11 durchgeführt werden. Die Gesamtkosten für die Umwandlung aller Elemente in andere Palindrome betragen mehr als 11.

Beispiel 3:

Eingabe: nums = [22,33,22,33,22] Ausgabe: 22 Erläuterung: Wir können alle Elemente im Array in Palindromzahlen 22 umwandeln, um ein Array mit gleichen Zahlen zu erhalten, und das Array wird zu
[22,22,22 ,22, 22] Es müssen 2 Sonderoperationen mit Kosten von |33 - 22| + |33 - 22| = 22 durchgeführt werden.
Die Gesamtkosten für die Umwandlung aller Elemente in andere Palindrome betragen mehr als 22.

Hinweis:

1 <= n <= 105 1 <= nums[i] <= 109

Problem: 100151. Minimale Kosten für die Umwandlung eines Arrays in ein gleichwertiges Array

Ideen

Suchen Sie den Median im gesamten Array, suchen Sie das erste Palindrom um den Median, berechnen Sie den Abstand zwischen diesen beiden Palindromen für alle Werte und geben Sie den relativ kleineren zurück

Die Komplexität

Zeitkomplexität:

Der Hauptgrund ist, dass O(nlogn) benötigt wird.

Raumkomplexität:

Es werden nur Konstanten verwendet, daher ist es O(1)

Code

class Solution:
    def minimumCost(self, nums: List[int]) -> int:
        nums = sorted(nums)

        if len(nums)%2==1:
            midval1 = nums[len(nums)//2]
        else:
            midval1 = (nums[len(nums)//2] + nums[ len(nums)//2 -1 ]) // 2



        def check(num):
            num = str(num)
            left,right = 0,len(num)-1
            while left < right:
                if num[left] != num[right]:
                    return False
                left += 1
                right -=1
            return True
        
        def find(midval):
            if check(midval):
                return [midval,-1]
            left = midval-1
            right = midval+1

            while True:
                if check(left):
                    break
                left-=1

            while True:
                if check(right):
                    break
                right+=1

            return [left,right]

        s1 = find(midval1)
        a,b = s1[0],s1[1]

        ans1 = 0
        ans2 = 0
        for num in nums:
            ans1 += abs(a - num)
            ans2 += abs(b - num)

        return min(ans1,ans2)

Guess you like

Origin blog.csdn.net/qq_51118755/article/details/135351194