สมมติว่าเรามีจำนวน x และ x เป็นจำนวนไม่เป็นลบ เราต้องหาสแควร์รูทของ x โดยไม่ต้องใช้ฟังก์ชันไลบรารี ดังนั้นเราต้องสร้างฟังก์ชันของเราเองเพื่อประเมิน sqrt(x) ในฟังก์ชันนี้ ตัวเลขทศนิยมของเอาต์พุตจะถูกตัดออก
สมมติว่าค่าของ x คือ 4 ดังนั้นผลลัพธ์จะเป็น 2 หาก x เป็น 8 ดังนั้นผลลัพธ์จะเป็น 2 ด้วย เนื่องจาก sqrt(8) คือ 2.82842 แต่เราจะเอาเฉพาะส่วนจำนวนเต็มเท่านั้น
ในการแก้ปัญหานี้ ให้ทำตามขั้นตอนเหล่านี้ -
- เริ่มต้น l =1 และ h =x + 1 คำตอบ =0
- ในขณะที่ h> l ทำ
- กลาง =(h + l)/2
- ถ้า mid*mid <=x แล้ว l :=mid + 1, answer =mid
- มิฉะนั้น h =กลาง
- ส่งคืนคำตอบ
มาดูการใช้งานกันให้เกิดความเข้าใจกันมากขึ้น
ตัวอย่าง (Python)
class Solution(object): def mySqrt(self, x): """ :type x: int :rtype: int """ low = 1 high = x+1 ans = 0 while high>low: mid = (high+low)//2 print(low,mid,high) if mid*mid<=x: low = mid+1 ans = mid else: high = mid return ans ob1 = Solution() print(ob1.mySqrt(4)) print(ob1.mySqrt(16)) print(ob1.mySqrt(7)) print(ob1.mySqrt(15))
อินพุต
print(ob1.mySqrt(4)) print(ob1.mySqrt(16)) print(ob1.mySqrt(7)) print(ob1.mySqrt(15))
ผลลัพธ์
2 4 2 3