สมมติว่าเรามีรายการตัวเลขที่ไม่เป็นลบที่เรียกว่า nums และค่าบวกอีกค่าหนึ่งคือ k เราต้องหาเช็คว่ามีรายการย่อยที่มีความยาวอย่างน้อย 2 รายการที่ผลรวมเป็นทวีคูณของ k หรือไม่
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[12, 6, 3, 4] k =5 ผลลัพธ์จะเป็น True เนื่องจากรายการย่อยคือ [12, 3] ผลรวมเป็น 15 ซึ่งหารด้วย 5 ลงตัว
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ผลรวม :=0
- m :=แผนที่ใหม่
- m[0] :=-1
- สำหรับ i ในช่วง 0 ถึงขนาดของ nums ให้ทำ
- sum :=sum + nums[i]
- sum :=sum mod k
- ถ้าผลรวมเป็น m แล้ว
- ถ้า i - m[sum]>=2 แล้ว
- คืนค่า True
- ถ้า i - m[sum]>=2 แล้ว
- มิฉะนั้น
- m[sum] :=i
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution:
def solve(self, nums, k):
sum = 0
m = {}
m[0] = -1
for i in range(0, len(nums)):
sum += nums[i]
sum %= k
if sum in m:
if i - m[sum] >= 2:
return True
else:
m[sum] = i
return False
ob = Solution()
nums = [12, 6, 3, 4]
k = 5
print(ob.solve(nums, k)) อินพุต
[12, 6, 3, 4], 5
ผลลัพธ์
True