mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01:08 +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
|
||||
|
||||
|
||||
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__":
|
||||
import doctest
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user