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

Pythonでインデックスまたはローカルピークを見つけるプログラム


numsという番号のリストがあるとします。 nums内のすべてのピーク要素のインデックスを昇順で並べ替える必要があります。これら3つの条件がすべて満たされた場合のピーク要素のインデックスi:1。nums [i]とは異なる右側の次の数値が存在しないか、nums[i]よりも小さい必要があります。2。上の前の数値nums [i]とは異なる左側が存在しないか、nums[i]よりも小さい必要があります。3。左側または右側にnums[i]とは異なる数値が少なくとも1つあります。

したがって、入力がnums =[5、8、8、8、6、11、11]のような場合、8のプラトーは次のように見なされるため、出力は[1、2、3、5、6]になります。ピーク[1,2,3]。そして、11も[5、6]です。

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

  • n:=numsのサイズ
  • ans:=新しいリスト
  • i:=0
  • i
  • i0:=i
  • i
  • i:=i + 1
  • if(i0 is 0 or nums [i0]> nums [i0 -1])and(i is n or nums [i0]> nums [i])、then
    • i0が0でない場合、またはiがnでない場合、
      • ansの最後に(i0からi-1までのリスト)を挿入します
  • 回答を返す
  • 理解を深めるために、次の実装を見てみましょう-

    def solve(nums):
       n = len(nums)
       ans = []
       i = 0
       while i < n:
          i0 = i
          while i < n and nums[i] == nums[i0]:
             i += 1
          if (i0 == 0 or nums[i0] > nums[i0 - 1]) and (i == n or nums[i0] > nums[i]):
             if i0 != 0 or i != n:
                ans.extend(range(i0, i))
       return ans
    
    nums = [5, 8, 8, 8, 6, 11, 11]
    print(solve(nums))

    入力

    [5, 8, 8, 8, 6, 11, 11]

    出力

    [1, 2, 3, 5, 6]

    1. Pythonでポリゴンの領域を見つけるプログラム

      順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの領域を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は15になります。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です return x1 * y2-y1 * x2 メインの方法から、次の手順を実行します N:=ポイントのサイズ (firstx、firsty):=points [0] (prevx、prevy):=(fir

    2. Pythonでポリゴンの周囲を見つけるプログラム

      順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの周囲を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は16になります。 2つの辺の長さは3で、2つの辺の長さは5なので、2 * 5 + 2 * 3=16です。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です ユークリッド距離である((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))の平方根を返します (x1、y1)