mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-02-25 18:38:39 +00:00
Perfect square using binary search (#2351)
* Add perfect_square_binary_search * Update tests * Add tests
This commit is contained in:
parent
ee914c751c
commit
2c0127d71a
@ -21,6 +21,52 @@ def perfect_square(num: int) -> bool:
|
|||||||
return math.sqrt(num) * math.sqrt(num) == num
|
return math.sqrt(num) * math.sqrt(num) == num
|
||||||
|
|
||||||
|
|
||||||
|
def perfect_square_binary_search(n: int) -> bool:
|
||||||
|
"""
|
||||||
|
Check if a number is perfect square using binary search.
|
||||||
|
Time complexity : O(Log(n))
|
||||||
|
Space complexity: O(1)
|
||||||
|
|
||||||
|
>>> perfect_square_binary_search(9)
|
||||||
|
True
|
||||||
|
>>> perfect_square_binary_search(16)
|
||||||
|
True
|
||||||
|
>>> perfect_square_binary_search(1)
|
||||||
|
True
|
||||||
|
>>> perfect_square_binary_search(0)
|
||||||
|
True
|
||||||
|
>>> perfect_square_binary_search(10)
|
||||||
|
False
|
||||||
|
>>> perfect_square_binary_search(-1)
|
||||||
|
False
|
||||||
|
>>> perfect_square_binary_search(1.1)
|
||||||
|
False
|
||||||
|
>>> perfect_square_binary_search("a")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
TypeError: '<=' not supported between instances of 'int' and 'str'
|
||||||
|
>>> perfect_square_binary_search(None)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
TypeError: '<=' not supported between instances of 'int' and 'NoneType'
|
||||||
|
>>> perfect_square_binary_search([])
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
TypeError: '<=' not supported between instances of 'int' and 'list'
|
||||||
|
"""
|
||||||
|
left = 0
|
||||||
|
right = n
|
||||||
|
while left <= right:
|
||||||
|
mid = (left + right) // 2
|
||||||
|
if mid ** 2 == n:
|
||||||
|
return True
|
||||||
|
elif mid ** 2 > n:
|
||||||
|
right = mid - 1
|
||||||
|
else:
|
||||||
|
left = mid + 1
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import doctest
|
import doctest
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user