สมมุติว่าเรามีรายการของตัวเลขที่เรียกว่า nums เราต้องหาจำนวนย่อยทางคณิตศาสตร์ที่มีความยาว ≥ 3 อย่างที่ทราบกันดีว่าลำดับเลขคณิตคือรายการของตัวเลขที่ผลต่างระหว่างตัวเลขหนึ่งกับตัวถัดไปเหมือนกันพี>
ดังนั้น หากอินพุตเป็น nums =[6, 12, 13, 8, 10, 14] ผลลัพธ์จะเป็น 3 เนื่องจากเรามีลำดับย่อยเช่น [6, 8, 10], [6, 10, 14 ], [12, 13, 14].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
-
dp :=แผนที่ใหม่
-
n :=ขนาดของ nums
-
res :=0
-
สำหรับผมอยู่ในช่วง 0 ถึง n ทำ
-
สำหรับ j ในช่วง 0 ถึง i ทำ
-
diff :=nums[i] - nums[j]
-
ก่อนหน้า :=dp[(i, diff)] หากไม่มีอยู่ ให้ 0
-
prevprev :=dp[(j, diff)] หากไม่มีอยู่ แสดงว่าเป็น 0
-
dp[i, diff] :=ก่อนหน้า + ก่อนหน้า + 1
-
res :=res + ก่อนหน้า
-
-
-
ผลตอบแทน
ตัวอย่าง
class Solution:
def solve(self, nums):
dp = {}
n = len(nums)
res = 0
for i in range(n):
for j in range(i):
diff = nums[i] - nums[j]
prev = dp.get((i, diff), 0)
prevprev = dp.get((j, diff), 0)
dp[(i, diff)] = prev + prevprev + 1
res += prevprev
return res
ob = Solution()
nums = [6, 12, 13, 8, 10, 14]
print(ob.solve(nums)) อินพุต
[6, 12, 13, 8, 10, 14]
ผลลัพธ์
3