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

โปรแกรมหาจำนวน quadruple ที่ผลรวมน้อยกว่า target จาก 4 รายการใน Python


มี 4 รายการ A,B,C,D และ target หาจำนวน quadruple (i,j,k,l) ที่ A[i]+B[j]+C[k]+D[l] ≤ target

เช่น A=[3,2] B=[5,3] C=[1] D=[2,3] target=9 ให้ 3

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

  • คำนวณผลรวมทุกคู่ A+B เก็บใน temp_list แล้วเรียง
  • วนทุกคู่ C+D: หา sum_ab = target - (C[i]+D[j])
  • ใช้ bisect_right หาจำนวนใน temp_list ≤ sum_ab
  • รวมเป็นคำตอบ

ตัวอย่างโค้ด

from bisect import bisect_right
class Solution:
    def solve(self, A, B, C, D, target):
        temp_list = []
        for i in range(len(A)):
            for j in range(len(B)):
                temp_list.append(A[i] + B[j])
        temp_list.sort()
        ans = 0
        for i in range(len(C)):
            for j in range(len(D)):
                sum_cd = C[i] + D[j]
                sum_ab = target - sum_cd
                ans += bisect_right(temp_list, sum_ab)
        return ans

ob = Solution()
A = [3,2]; B = [5,3]; C = [1]; D = [2,3]; target = 9
print(ob.solve(A, B, C, D, target))

อินพุต

[3, 2], [5, 3], [1], [2, 3], 9

เอาต์พุต

3