สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums โดยมีหมายเลขบวกเฉพาะ nums เราต้องหาจำนวนสี่เท่าเช่น (a, b, c, d) จากจำนวนที่ a*b =c*d, a, b, c และ d เป็นองค์ประกอบที่ชัดเจนของ nums
ดังนั้น หากอินพุตเป็น nums =[3, 6, 4, 8] ผลลัพธ์จะเป็น 8 เพราะสี่เท่าคือ [[3,8,6,4], [3,8,4,6] , [8,3,6,4], [8,3,4,6], [6,4,3,8], [4,6,3,8], [6,4,8,3] , [4,6,8,3]].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- c :=แผนที่ใหม่
- n :=ขนาดของ nums
- สำหรับฉันในช่วง 0 ถึง n - 1 ทำ
- สำหรับ j ในช่วง i + 1 ถึง n - 1 ทำ
- x :=nums[i] * nums[j]
- c[x] :=1 + (c[x] ถ้ามี มิฉะนั้น 0)
- สำหรับ j ในช่วง i + 1 ถึง n - 1 ทำ
- ret :=0
- สำหรับแต่ละ x ในรายการของค่าทั้งหมดใน c ทำ
- ret :=ret + x *(x - 1)
- ผลตอบแทนย้อนหลัง * 4
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(nums): c = {} n = len(nums) for i in range(n): for j in range(i + 1, n): x = nums[i] * nums[j] c[x] = c.get(x, 0) + 1 ret = 0 for x in c.values(): ret += x * (x - 1) return ret * 4 nums = [3, 6, 4, 8] print(solve(nums))
อินพุต
[3, 6, 4, 8]
ผลลัพธ์
8