LeetCode 496,739503,31 pythonブラシ問題

3968 ワード


496.次のより大きな要素I
重複要素を持たない2つの配列nums1およびnums2が与えられ、ここでnums1nums2のサブセットである.nums1の各要素がnums2の次の値より大きい値を見つけた.nums1の数字xの次のより大きな要素は、xがnums2の対応する位置の右側のxより大きい最初の要素を指す.存在しない場合は、対応する位置出力-1を出力します.
例1:
  : nums1 = [4,1,2], nums2 = [1,3,4,2].
  : [-1,3,-1]
  :
      num1    4,                    ,     -1。
      num1    1,        1            3。
      num1    2,                ,     -1。

例2:
  : nums1 = [2,4], nums2 = [1,2,3,4].
  : [3,-1]
  :
      num1    2,               3。
      num1    4,                ,     -1。

注意:
  • nums1およびnums2のすべての要素は一意である.
  • nums1およびnums2の配列サイズはいずれも1000を超えない.
  • class Solution:
        def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
            d = {}
            st = []
            ans = []
            
            for x in nums2:
                while len(st) and st[-1] < x:
                    d[st.pop()] = x
                st.append(x)
                
            for x in nums1:
                ans.append(d.get(x,-1))
                
            return ans
                   

     739. 毎日の温度
    毎日 のリストに基づいて、対応する位置の入力は、温度が上昇するまでどのくらい待つ必要があるかの日数です.その後上昇しない場合は、0を入力してください.
    たとえば、リストtemperatures = [73, 74, 75, 71, 69, 72, 76, 73]が与えられ、あなたの出力は[1, 1, 4, 2, 1, 1, 0, 0]であるべきです.
    ヒント: リストの長さの範囲は[1, 30000]です.各気温の値は[30, 100]の範囲内の整数である.
    class Solution:
        def dailyTemperatures(self, T: List[int]) -> List[int]:
            #   ,         
            r=[0]*len(T)
            stack=[]
            for i in range(len(T)):
                while len(stack)>0 and T[stack[-1]]

     
     
    503.次のより大きな要素II
    ループ配列(最後の要素の次の要素は配列の最初の要素)が与えられ、各要素の次のより大きな要素が出力されます.数字xの次のより大きな要素は配列の遍歴順で、この数字の後の最初の数はそれより大きい数で、これはあなたが次のより大きな数を循環的に検索すべきことを意味します.存在しない場合は、-1が出力されます.
    例1:
      : [1,2,1]
      : [2,-1,2]
      :     1           2;
       2           ; 
        1               ,     2。
    class Solution:
        def nextGreaterElements(self, nums: List[int]) -> List[int]:
            l=len(nums);
            stk=[]
            b=[-1]*l
            for i in range(l*2):
                while  len(stk)>0 and nums[stk[-1]]

     
    2を掛けることでまず値をループします
     
     
    31.次の配列
    次の配列を取得する関数を実装するには、アルゴリズムは、与えられた数値シーケンスを辞書シーケンスの次のより大きな配列に再配列する必要がある.
    次のより大きな配列が存在しない場合は、数値を最小の配列(すなわち昇順配列)に再配列します.
    追加の定数空間のみを使用できるように、その場で修正する必要があります.
    以下に、入力が左側の列にあり、対応する出力が右側の列にある例を示します.1,2,3  →  1,3,2 3,2,1  →  1,2,3 1,1,5  →  1,5,1
    解題構想:栗を挙げると、現在の組み合わせは12431であり、431が減少していることがわかり、同時に4>2であることがわかり、431を逆順序にし、組み合わせを12134に変え、134から2より大きい最初の数字と2交換を見つけ、次の組み合わせ13124を得た.完全に減少した組合せについては、例えば4321が逆順序の後に終了することができる.
    class Solution(object):
        def nextPermutation(self, nums):
            """
            :type nums: List[int]
            :rtype: None Do not return anything, modify nums in-place instead.
            """
            ab=[]
            l=len(nums)
            left=right=-1
            
           
            for i in range (l):
                if nums[l-2-i]nums[left]:
                    a=nums[left]
                    nums[left]=nums[i]
                    nums[i]=a
                    break
            
            return nums