周賽296。模擬題,幸好腦筋轉得快,似乎不少人糾結在怎麼找規律而卡很久。

題目

解法

本來說想說應該是有個規律可以依照索引位置來判斷取最大或最小,想十秒沒想到就放棄了,反正easy題不需要最佳解,當下之急是先通過再說。

直接維護一個變數flag,若為true則代表當前取min,否則取max。
一次取兩個數做運算後加到新的數列中,並將flag做not,一直重複到數列只剩下一個數為止。

class Solution:
    def minMaxGame(self, nums: List[int]) -> int:
        flag=True
        while len(nums)>1:
            temp=[]
            for i in range(0,len(nums),2):
                if flag:
                    temp.append(min(nums[i],nums[i+1]))
                else:
                    temp.append(max(nums[i],nums[i+1]))
                flag=not flag
            nums=temp
            
        return nums[0]

後來發現規律也很簡單,只是當時一急就沒想到。
每次取2個數做運算,而只有2種運算,所以2*2=4個數字會形成一次循環。
對索引i模4就可以知道當前對應哪一種運算,若餘0代表min,餘2則代表max。

class Solution:
    def minMaxGame(self, nums: List[int]) -> int:
        while len(nums)>1:
            a=[]
            for i in range(0,len(nums),2):
                if i%4==0:
                    a.append(min(nums[i],nums[i+1]))
                else:
                    a.append(max(nums[i],nums[i+1]))
            nums=a
            
        return nums[0]