สมมติว่ามีรายการตัวเลขชื่อ nums เราต้องหาจำนวนสับลิสต์ที่องค์ประกอบแรกและสุดท้ายมีค่าเท่ากัน
เช่น ถ้าอินพุตคือ nums = [10, 15, 13, 10] ผลลัพธ์จะเป็น 5 สับลิสต์ที่ตรงเงื่อนไข: [10], [15], [13], [10], [10, 15, 13, 10]
ขั้นตอนการแก้ปัญหา
- num_sublists := ขนาดของ nums
- d := map ว่าง
- สำหรับแต่ละ n ใน nums ทำ d[n] := d[n] + 1
- สำหรับแต่ละคู่ k, v ใน d ถ้า v ไม่ใช่ 1 num_sublists := num_sublists + (v-1)*v//2
- คืนค่า num_sublists
ตัวอย่างโค้ด
from collections import defaultdict
class Solution:
def solve(self, nums):
num_sublists = len(nums)
d = defaultdict(int)
for n in nums:
d[n] += 1
for k, v in d.items():
if v != 1:
num_sublists += (v-1)*v//2
return num_sublists
ob = Solution()
nums = [10, 15, 13, 10]
print(ob.solve(nums))
อินพุต
[10, 15, 13, 10]
เอาต์พุต
5