สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums และอีกค่าหนึ่งคือ k เราต้องหาจำนวนอาร์เรย์ย่อยที่ดี กล่าวกันว่า subarray เป็น subarray ที่ดีถ้ามี k เลขคี่
ดังนั้น หากอินพุตเท่ากับ nums =[1,1,2,1,1], k =3 เอาต์พุตจะเป็น 2 เนื่องจากมีอาร์เรย์ย่อยสองชุด [1,1,2,1] และ [1,2 ,1,1].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
odd_i :=รายการใหม่
-
สำหรับฉันในช่วง 0 ถึงขนาดของ nums - 1 ทำ
-
ถ้า nums[i] mod 2 เหมือนกับ 1 แล้ว
-
ใส่ i ต่อท้าย odd_i
-
-
-
start :=0, end :=k - 1
-
ผม :=0
-
นับ :=0
-
ในขณะที่สิ้นสุด <ขนาดของ odd_i ทำ
-
ถ้าท้ายเท่ากับขนาด odd_i - 1 แล้ว
-
j :=ขนาดของ nums - 1
-
-
มิฉะนั้น
-
j :=odd_i[end + 1] - 1
-
-
count :=count +(odd_i[start] - i + 1) *(j - odd_i[end] + 1)
-
ผม :=odd_i[start] + 1
-
start :=start + 1
-
end :=end + 1
-
-
จำนวนคืน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(nums, k):
odd_i = []
for i in range(len(nums)):
if nums[i] % 2 == 1:
odd_i.append(i)
start = 0
end = k - 1
i = 0
count = 0
while end < len(odd_i):
if end == len(odd_i) - 1:
j = len(nums) - 1
else:
j = odd_i[end + 1] - 1
count = count + (odd_i[start] - i + 1) * (j - odd_i[end] + 1)
i = odd_i[start] + 1
start = start + 1
end = end + 1
return count
nums = [1,1,2,1,1]
k = 3
print(solve(nums, k)) อินพุต
[1,2,3,4,5,6,7,8]
ผลลัพธ์
2