Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาค่าสูงสุดของสมการใน Python

ปัญหา

มีอาร์เรย์ points เก็บพิกัด (x_i, y_i) เรียงตาม x เพิ่มขึ้น และค่า k หาค่าสูงสุดของ y_i + y_j + |x_i - x_j| โดยที่ |x_i - x_j| <= k และ i < j

ตัวอย่าง

points = [[2,4],[3,1],[6,11],[7,-9]], k = 1 → ผลลัพธ์ 6 เพราะคู่แรกให้ 4+1+|2-3|=6, คู่ที่สาม-สี่ให้ 11+(-9)+|6-7|=3

ขั้นตอนการแก้ปัญหา

  1. left := 0, right := 1, max_value := -inf
  2. بينما right < len(points):
    • (xl, yl) := points[left], (xr, yr) := points[right]
    • diff := |xr - xl|
    • ถ้า left == right: right += 1
    • มิฉะนั้นถ้า diff <= k:
      • m := yl + yr + diff
      • max_value := max(max_value, m)
      • ถ้า yl >= yr - diff: right += 1 มิฉะนั้น: left += 1
    • มิฉะนั้น: left += 1
  3. คืน max_value

การนำไปใช้งาน (Python)

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))

อินพุต

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

เอาต์พุต

6