Tägliche LeetCode-Frage | Advantage Shuffle

Themenbeschreibung

Gegeben sind zwei Arrays nums 1 nums1 gleicher Größen u m s 1 undnums 2 nums2n u m s 2nums 1 nums1n u m s 1 vs.nums 2 nums2Der Vorteil von n u m s 2 kann genutzt werden, umnums 1 [ i ] nums1[i] zun u m s 1 [ i ] >nums 2 [ i ] nums2[i]Indexii von n u m s 2 [ i ]Die Anzahl von i wird beschrieben.

Gibt Nummern 1 zurück, Nummern1Jede Permutation von n u m s 1 , sodass sie relativ zunums 2 nums2Der Vorteil von n u m s 2 wird maximiert.

Beispieleingabe

Beispiel 1

Eingabe: Nums1 = [2,7,11,15], Nums2 = [1,10,4,11]
Ausgabe: [2,11,7,15]

Beispiel 2

Eingabe: Nums1 = [12,24,8,32], Nums2 = [13,25,32,11]
Ausgabe: [24,32,8,12]

Tian Jis Problemlösungsideen im Stil eines Pferderennens:

Nun nimm das Pferd unter dem König und das andere Pferd, nimm das Pferd des Königs und das andere Pferd, und nimm das Pferd des Königs und das andere Pferd. „Seit drei Generationen hat Tian Ji die Tochter des Königs nach einem Sieg gewonnen.

Jeder hat die Geschichte von Tian Jis Pferderennen gehört. Kurz gesagt geht es darum, die Effektivität jedes dominanten Pferdes zu maximieren und das unterlegene Pferd zu nutzen, um das überlegene Pferd des Gegners zu vernichten.

Mit der gleichen Strategie können wir nums 1 nums1 setzenn u m s 1 als Tian Jis Pferdeherde, setzenums 2 nums2n u m s 2 als Pferdeherde von König Qi Wei und folgende Prinzipien wienums 1 nums1Die Spielreihenfolge für n u m s 1 :

  • Ordnen Sie zunächst die beiden Pferdegruppen in aufsteigender Reihenfolge entsprechend ihrer Beinstärke an und schicken Sie jeweils ein Pferd in die Warteschlange.
  • wenn nums 1 nums1Pferd xxin n u m s 1x Fußkraftist besser alsNums NumsPferd JJin n u m sy , dann wird bestimmt, das aktuelle Pferdxxx als dominantes Pferd von 1 ist in der vorherigen Reihenfolge angeordnet, alsoans [left] = x ans[left] = xan s [ links ] _ _ _=x
  • wenn nums 1 nums1Pferd xxin n u m s 1x Die Fußkraftist nicht so gut wieNums NumsPferd JJin n u m sy , dann wird bestimmt, das aktuelle Pferdxxx ist das minderwertige Pferd von 1 aus der hinteren Reihe, alsoans [right] = x ans[right] = xan s [ richtig ] _ _ _ _=x

Also nums 1 nums1Jedes Pferd in n u m s 1 kann entsprechend seiner eigenen Hufkraft seine beste Leistung erbringen, und dies ist ein iterativer Prozess, der programmiert werden kann.
Die einzige Einschränkung:Nums 2 Nums2Die Reihenfolge der Pferde in n u m s 2 kann nicht mehr geändert werden, daher sollte ein zusätzliches Indexarray verwendet werden, um die Reihenfolge zu kennzeichnen, sodass sie jedes Mal mitnums 1 nums1Die von Nummer 1 verglichenen Pferde sind alle in aufsteigender Reihenfolge .

der Code

from typing import List

class Solution:
    def advantageCount(self, nums1: List[int], nums2: List[int]) -> List[int]:

        ans=[0 for i in range(len(nums1))]
        # 比较取巧的idx数组,解决了nums2顺序索引的问题
        idx = sorted(range(len(nums1)),key=lambda i:nums2[i])

        nums1.sort()
        left,right=0,len(nums2)-1

        for i,num in enumerate(nums1):
            # print("第{}次比较过程:".format(i))
            # 优势马对应的情况
            if num>nums2[idx[left]]:
                # print("当前使用nums1中的{}与nums2中索引为{}的{}比较".format(num,idx[left],nums2[idx[left]]))
                ans[idx[left]]=num
                left+=1
            # 劣势马对应的情况
            else:
                # print("当前使用nums1中的{}与nums2中索引为{}的{}比较".format(num, idx[right], nums2[idx[right]]))
                ans[idx[right]]=num
                right-=1
        return ans
if __name__ == '__main__':
    nums1 = [2, 7, 11, 15]
    nums2 = [1, 10, 4, 11]
    print(Solution().advantageCount(nums1, nums2))

Supongo que te gusta

Origin blog.csdn.net/weixin_43427721/article/details/127211054
Recomendado
Clasificación