ตรวจสอบว่ามีรูปแบบยาว m ซ้ำ k ครั้งขึ้นไปหรือไม่
ให้อาร์เรย์ nums ที่มีค่าบวก เราต้องการตรวจสอบว่ามีรูปแบบ (pattern) ยาว m ที่ซ้ำกันอย่างน้อย k ครั้งหรือไม่ รูปแบบหมายถึงช่วงย่อย (subarray) ที่ต่อเนื่องและไม่ทับซ้อนกัน ประกอบด้วยค่าหนึ่งหรือหลายค่า ที่ซ้ำหลายครั้ง
ตัวอย่าง
nums = [3,5,1,4,3,1,4,3,1,4,3,9,6,1], m = 3, k = 2
ผลลัพธ์: True เพราะมีรูปแบบ [1,4,3] ซ้ำ 3 ครั้ง
ขั้นตอนการแก้ปัญหา
- วนลูป i จาก 0 ถึงความยาว nums - 1
- sub1 := ช่วงย่อยของ nums จากดัชนี i ถึง (i + m*k) - 1
- sub2 := ช่วงย่อย k ชุดติดกันของ nums จากดัชนี i ถึง (i + m - 1)
- ถ้า sub1 เท่ากับ sub2 ให้คืนค่า True
- จบลูป ให้คืนค่า False
ตัวอย่างโค้ด Python
def solve(nums, m, k):
for i in range(len(nums)):
sub1 = nums[i:i+m*k]
sub2 = nums[i:i+m] * k
if sub1 == sub2:
return True
return False
nums = [3,5,1,4,3,1,4,3,1,4,3,9,6,1]
m = 3
k = 2
print(solve(nums, m, k)) # Output: True
อินพุต
[3,5,1,4,3,1,4,3,1,4,3,9,6,1], 3, 2
เอาต์พุต
True