二进制搜索,返回值未修改



为什么我的res变量在递归过程中没有被修改?谢谢你!

# Input [-1,0,3,5,9,12]
# output: -1
# expected: 4

class Solution:
def search(self, nums: List[int], target: int) -> int:
# boundary condition
if not nums:
return -1
res = -1
def binarySearch(nums, left, right):
mid = (left + right) // 2
# find the res, modify the `res` variable
if target == nums[mid]:
global res
res = mid
print(res) ##### print line, res: 4
# base case
if left >= right:
return 
if target < nums[mid]:
binarySearch(nums, left, mid-1)
if target > nums[mid]:
binarySearch(nums, mid + 1, right)
binarySearch(nums, 0, len(nums)-1)
return res

声明为res = -1的变量res是局部的而不是全局的。行:

global res
res = mid

引用一个全局变量res,也就是说,如果您在这个类之外调用res,它将具有所需的值。

您可以实现所需的结果如下:

class Solution:
def search(self, nums: List[int], target: int) -> int:
# boundary condition
if not nums:
return -1
self.res = -1
def binarySearch(nums, left, right):
mid = (left + right) // 2

if target == nums[mid]:
self.res = mid
print(self.res) ##### print line, res: 4
# base case
if left >= right:
return 
if target < nums[mid]:
binarySearch(nums, left, mid-1)
if target > nums[mid]:
binarySearch(nums, mid + 1, right)
binarySearch(nums, 0, len(nums)-1)
return self.res

关于pythonglobal关键字的更多信息在这里。

最新更新