Computer >> Máy Tính >  >> Lập trình >> Python

Tìm dãy con có kích thước 3 được sắp xếp theo thời gian tuyến tính trong Python

Giả sử chúng ta có một mảng với N số, chúng ta phải kiểm tra xem 3 phần tử sao cho b [i]

Vì vậy, nếu đầu vào là [13, 12, 11, 6, 7, 3, 31], thì đầu ra sẽ là [6,7,31]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • n:=kích thước của A
  • tối đa:=n-1, tối thiểu:=0
  • small:=một mảng có kích thước 1000 và điền bằng 0
  • nhỏ hơn [0]:=-1
  • đối với tôi trong phạm vi từ 1 đến n, thực hiện
    • nếu A [i] <=A [tối thiểu], thì
      • tối thiểu:=i
      • nhỏ hơn [i]:=-1
    • nếu không,
      • nhỏ hơn [i]:=tối thiểu
  • lớn hơn:=một mảng có kích thước 1000 và điền bằng 0
  • lớn hơn [n-1]:=-1
  • đối với tôi trong phạm vi n-2 đến -1, giảm đi 1, thực hiện
    • nếu A [i]> =A [tối đa], thì
      • tối đa:=i
      • lớn hơn [i]:=-1
    • nếu không,
      • lớn hơn [i]:=tối đa
  • đối với tôi trong phạm vi từ 0 đến n, thực hiện
    • nếu [i] nhỏ hơn không giống -1 và lớn hơn [i] không giống -1, thì
      • trả về A [nhỏ hơn [i]], A [i], A [lớn hơn [i]]
  • trả về "Không có gì"

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

def find_inc_seq(A):
   n = len(A)
   maximum = n-1
   minimum = 0
   smaller = [0]*10000
   smaller[0] = -1
   for i in range(1, n):
      if (A[i] <= A[minimum]):
         minimum = i
         smaller[i] = -1
      else:
         smaller[i] = minimum
   greater = [0]*10000
   greater[n-1] = -1
   for i in range(n-2, -1, -1):
      if (A[i] >= A[maximum]):
         maximum = i
         greater[i] = -1
      else:
         greater[i] = maximum
   for i in range(0, n):
      if smaller[i] != -1 and greater[i] != -1:
         return A[smaller[i]], A[i], A[greater[i]]
   return "Nothing"
arr = [13, 12, 11, 6, 7, 3, 31]
print(find_inc_seq(arr) )

Đầu vào

[13, 12, 11, 6, 7, 3, 31]

Đầu ra

(6, 7, 31)