ภาพรวม
ให้เลขจำนวนเต็มบวก 2 จำนวน left และ right ต้องการนับจำนวนเลขคี่ในช่วง [left, right] รวมปลาย
ตัวอย่าง
left = 3, right = 15
เลขคี่: [3,5,7,9,11,13,15] → รวม 7 ตัว
ขั้นตอนการแก้ปัญหา (สูตรคณิตศาสตร์)
- ถ้า
leftเป็นคี่ หรือrightเป็นคี่:- คืนค่า
1 + (right - left) // 2
- คืนค่า
- มิฉะนั้น (ทั้งคู่เป็นเลขคู่):
- คืนค่า
(right - left) // 2
- คืนค่า
เหตุผล
ในช่วงที่มีจำนวนตัวเลข n ตัว จะมีเลขคี่ประมาณครึ่งหนึ่ง หากปลายทั้งสองเป็นคู่ จำนวนเลขคี่ = n//2 หากมีปลายคี่อย่างน้อย 1 ด้าน จะมีเลขคี่มากกว่าครึ่งหนึ่ง 1 ตัว
ตัวอย่างโค้ด (Python)
def solve(left, right):
if left % 2 == 1 or right % 2 == 1:
return (right - left) // 2 + 1
else:
return (right - left) // 2
left = 3
right = 15
print(solve(left, right))
อินพุต
3, 15
เอาต์พุต
7
ความซับซ้อน
- เวลา: O(1)
- พื้นที่: O(1)