Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで最も長い交互の不等式要素サブリストの長さを見つけるプログラム


numsと呼ばれるマンバーのリストがあり、連続するすべての数値間の等式関係が小なり記号と大なり記号の間で交互に変化するように、最長のサブリストinnumsの長さを見つけたとします。最初の2つの数値の不平等は、より小さいかより大きい可能性があります。

したがって、入力がnums =[1、2、6、4、5]のような場合、最長の不等式交互サブリストは[2、6、4、5]であり、2 <6> 4であるため、出力は4になります。 <5。

これを解決するには、次の手順に従います-

  • 関数get_direction()を定義します。これにはa、bが必要です

    • aがbと同じ場合は0を返し、それ以外の場合は-1を返します。a

  • numsのサイズが2未満の場合、

    • numsのサイズを返す

  • max_length:=1、cur_length:=1、last_direction:=0

  • 0からnums-1のサイズのiの場合、実行します

    • 方向:=get_direction(nums [i]、nums [i + 1])

    • 方向が0と同じ場合、

      • cur_length:=1

    • それ以外の場合、方向がlast_directionと同じである場合、

      • cur_length:=2

    • それ以外の場合

      • cur_length:=cur_length + 1

    • max_length:=max_lengthとcur_lengthの最大値

    • last_direction:=direction

  • max_lengthを返す

理解を深めるために、次の実装を見てみましょう-

class Solution:
   def solve(self, nums):
      if len(nums) < 2:
         return len(nums)
      def get_direction(a, b):
         return 0 if a == b else -1 if a < b else 1
      max_length = 1
      cur_length = 1
      last_direction = 0
      for i in range(len(nums) - 1):
         direction = get_direction(nums[i], nums[i + 1])
         if direction == 0:
            cur_length = 1
         elif direction == last_direction:
            cur_length = 2
         else:
            cur_length += 1
         max_length = max(max_length, cur_length)
         last_direction = direction
      return max_length
ob = Solution()
nums = [1, 2, 6, 4, 5]
print(ob.solve(nums))

入力

[1, 2, 6, 4, 5]

出力

4

  1. Pythonで二分木の最長交互パスの長さを見つけるプログラム

    二分木があるとすると、左と右の子を交互に繰り返して下る最長のパスを見つける必要があります。 したがって、入力が次のような場合 交互のパスが[2、4、5、7、8]であるため、出力は5になります。 これを解決するには、次の手順に従います。 rootがnullの場合、 0を返す 関数dfs()を定義します。これには、ノード、カウント、フラグが必要です ノードがnullでない場合、 フラグがTrueと同じ場合、 a:=dfs(ノードの左側、カウント+ 1、False) b:=dfs(ノードの右側、1、True) それ以外の場合、フラグがFalseと同じ場合、 a:=dfs

  2. Pythonで最長の連続シーケンスの長さを見つけるプログラム

    並べ替えられていない数値の配列があるとすると、連続する要素の最長シーケンスの長さを見つける必要があります。 したがって、入力がnums =[70、7、50、4、6、5]の場合、連続する要素の最長シーケンスは[4、5、6、7]であるため、出力は4になります。したがって、その長さを返します:4。 これを解決するには、次の手順に従います- nums:=numsのすべての一意の要素 max_cnt:=0 numsのnumごとに、実行します num-1がnumsにない場合、 cnt:=0 numがnumsに存在する間、実行します num:=num + 1