# CSPT25 Lecture 8 ## Guess Number ``` # The guess API is already defined for you. # @param num, your guess # @return -1 if my number is lower, 1 if my number is higher, otherwise return 0 # def guess(num: int) -> int: class Solution: def guessNumber(self, n: int) -> int: min, max = 1, n while min <= max: mid = (min + max) // 2 res = guess(mid) if res == 0: return mid elif res == -1: max = mid - 1 else: min = mid + 1 return -1 ``` ## Binary Search ``` class Solution: """ nums = [-1,0,3,5,9], target = 9 output = 4 nums = [-1,0,3,5,9], target = 2 output = -1 nums = [1], target = 1 output = 0 nums = [1], target = -2 output = -1 nums = [-1,(0*),[3],5,9], target = 2 mid = 1 + 1 // 2 = 1 """ def search(self, nums: List[int], target: int) -> int: return self.searchHelper(nums, target, 0, len(nums) - 1) def searchHelper(self, nums, target, min, max): if min > max: return -1 mid = (min + max) // 2 if nums[mid] == target: return mid elif nums[mid] < target: return self.searchHelper(nums, target, mid + 1, max) else: return self.searchHelper(nums, target, min, mid - 1) def searchIterative(self, nums: List[int], target: int) -> int: min, max = 0, len(nums) - 1 while min <= max: mid = (min + max) // 2 if nums[mid] == target: return mid elif nums[mid] < target: min = mid + 1 else: max = mid - 1 return -1 ``` ## Fibonacci Number ``` class Solution: def fib(self, n: int) -> int: computedValues = {1: 1, 0: 0} return self.fibHelper(n, computedValues) def fibHelper(self, n, computedValues): if n in computedValues: return computedValues[n] computedValues[n] = self.fibHelper(n - 1, computedValues) + self.fibHelper(n - 2, computedValues) return computedValues[n] def naiveFib(self, n: int) -> int: if n == 0: return 0 if n == 1: return 1 return self.fib(n - 1) + self.fib(n - 2) ```