I am working on [Valid Perfect Square - LeetCode](https://leetcode.com/problems/valid-perfect-square/) and wrote a standard leftmost bisect search to solve the problem: class Solution: def isPerfectSquare(self, num: int) -> bool: #base case 1 if num == 1: return True lo = 1 hi = num #recur case while lo < hi: mid = (lo + hi) // 2 if num > mid ** 2: lo = mid + 1 else: hi = mid return True if lo ** 2 == num else False However, the score is annoying: > Runtime: 48 ms, faster than 24.22% of Python3 online submissions for Valid Perfect Square. Memory Usage: 13.2 MB, less than 5.17% of Python3 online submissions for Valid Perfect Square. I am not able to improve a standard template a little bit. Could you please provide any advice?