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

Pythonでサブリストを厳密に増加させてから減少させる最長の長さを見つけるプログラム


numsという番号のリストがあるとします。 (最小の長さ3)の値が厳密に増加してから減少するように、最長のサブリストの長さを見つける必要があります。

したがって、入力がnums =[7、1、3、5、2、0]のような場合、サブリストは[2、4、6、3、1]が厳密に増加してから減少するため、出力は5になります。 。

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

  • i:=0、n:=aのサイズ、res:=-infinity
  • i
  • st:=i
  • linc:=0、ldec:=0
  • i
  • linc:=linc + 1
  • i:=i + 1
  • ia [i + 1]の場合、do
    • ldec:=ldec + 1
    • i:=i + 1
  • linc>0およびldec>0の場合、
    • res:=resの最大値と(i --st + 1)
  • i
  • i:=i + 1
  • res>=0の場合はresを返します。それ以外の場合は0
  • 理解を深めるために、次の実装を見てみましょう-

    class Solution:
       def solve(self, a):
          i, n, res = 0, len(a), float("-inf")
          while i < n - 2:
             st = i
             linc, ldec = 0, 0
             while i < n - 1 and a[i] < a[i + 1]:
                linc += 1
                i += 1
             while i < n - 1 and a[i] > a[i + 1]:
                ldec += 1
                i += 1
             if linc > 0 and ldec > 0:
                res = max(res, i - st + 1)
             while i < n - 1 and a[i] == a[i + 1]:
                i += 1
          return res if res >= 0 else 0
    ob = Solution()
    nums = [8, 2, 4, 6, 3, 1]
    print(ob.solve(nums))

    入力

    [[8, 2, 4, 6, 3, 1]

    出力

    5

    1. Pythonで指定された条件で最長のサブリストの長さを見つけるプログラム

      サブリストの最大値です。 6として。 これを解決するために、次の手順に従います- ret:=0 2つの両端キューminqとmaxqを定義します l:=0、r:=0 r

    2. Pythonで連続して厳密に増加するサブリストの長さを見つけるプログラム

      numsと呼ばれる数値のリストがあるとすると、リストから1つまたは0の要素を削除できるときに、連続する厳密に増加するサブリストの最大長を見つける必要があります。 したがって、入力がnums =[30、11、12、13、14、15、18、17、32]のような場合、リストから18を削除すると、[11、 12、13、14、15、17、32]これは最も長く、連続していて、厳密に増加するサブリストであり、その長さは7です。 これを解決するために、次の手順に従います- n:=numsのサイズ pre:=サイズnのリストと1で埋める 1からn-1の範囲のiの場合、実行 nums