สมมติว่าเรามีจำนวนอาร์เรย์ที่มีค่าบวกเฉพาะ เราต้องหาจำนวน tuples (a, b, c, d) ที่ a*b =c*d โดยที่ a, b, c และ d เป็นองค์ประกอบของ nums และองค์ประกอบทั้งหมด a, b, c และ d ต่างกัน
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[2,3,4,6] ผลลัพธ์จะเป็น 8 เพราะเราสามารถรับ tuples ได้เช่น (2,6,3,4), (2,6,4,3) , (6,2,3,4), (6,2,4,3), (3,4,2,6), (4,3,2,6), (3,4,6,2) , (4,3,6,2).
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- dic :=แผนที่ว่างเปล่า ค่าเริ่มต้นคือ 0 หากไม่มีคีย์บางตัว
- ตอบ:=0
- สำหรับฉันในช่วง 0 ถึงขนาดของ nums - 2 ทำ
- สำหรับ j ในช่วง i+1 ถึงขนาดของ nums ทำ
- dic[nums[i]*nums[j]] :=dic[nums[i]*nums[j]] + 1
- สำหรับ j ในช่วง i+1 ถึงขนาดของ nums ทำ
- สำหรับแต่ละ v ในรายการค่าทั้งหมดของ dic ทำ
- ถ้า v เหมือนกับ 1 แล้ว
- ติดตามตอนต่อไป
- v:=v-1
- s:=(v/2) * (8+8*v)
- ans :=ans + s
- ถ้า v เหมือนกับ 1 แล้ว
- คืนค่า ans เป็นจำนวนเต็ม
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from collections import defaultdict def solve(nums): dic = defaultdict(int) ans=0 for i in range(len(nums)-1): for j in range(i+1,len(nums)): dic[nums[i]*nums[j]]+=1 for v in dic.values(): if v==1: continue v=v-1 s=(v/2) * (8+8*v) ans+=s return int(ans) nums = [3,4,6,2] print(solve(nums))
อินพุต
[3,4,6,2]
ผลลัพธ์
0