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

Chương trình tìm giá trị lớn nhất của một phương trình trong Python

Giả sử chúng ta có một mảng được gọi là các điểm chứa các điểm tọa độ trên mặt phẳng 2D, chúng được sắp xếp theo các giá trị x, trong đó các điểm [i] =(x_i, y_i) nên x_i

Vì vậy, nếu đầu vào giống như điểm =[[2,4], [3,1], [6,11], [7, -9]] k =1, thì đầu ra sẽ là 6 vì hai điểm đầu tiên thỏa mãn điều kiện | xi - xj | <=1 bây giờ nếu chúng ta tính phương trình chúng ta nhận được 4+ 1 + | 2 - 3 | =6. Điểm thứ ba và thứ tư cũng thỏa mãn điều kiện và trả về giá trị 11 + -9 + | 6 - 7 | =3, vì vậy tối đa là 6.

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

  • left:=0, right:=1

  • max_value:=-inf

  • trong khi bên phải

    • (xl, yl):=điểm [trái]

    • (xr, yr):=điểm [phải]

    • khác:=| xr - xl |

    • nếu bên trái giống bên phải, thì

      • right:=right + 1

    • ngược lại khi diff <=k thì

      • m:=yl + yr + diff

      • max_value:=tối đa max_value và m

      • nếu yl> =yr - diff thì

        • right:=right + 1

      • nếu không,

        • left:=left + 1

      • nếu không,

        • left:=left + 1

  • trả về max_value

Ví dụ

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

def solve(points, k):
   left, right = 0, 1
   max_value = float('-inf')

   while right < len(points):
      xl, yl = points[left]
      xr, yr = points[right]

      diff = abs(xr - xl)
      if left == right:
         right += 1
      elif diff <= k:
         m = yl + yr + diff
         max_value = max(max_value, m)
         if yl >= yr - diff:
            right += 1
         else:
            left += 1
      else:
         left += 1

   return max_value

points = [[2,4],[3,1],[6,11],[7,-9]]
k = 1
print(solve(points, k))

Đầu vào

[[2,4],[3,1],[6,11],[7,-9]], 1

Đầu ra

6