试图做这个问题,我在python上的leetcode.com上找到了
给出n个元素的排序(按升序排列)整数数组num和目标值,编写一个函数以num搜索目标。如果目标存在,则返回其索引,否则返回-1。
示例1:
输入:nums = [-1,0,3,5,9,12],目标= 9 输出4 说明:9以数字形式存在,其索引为4
示例2:
输入:nums = [-1,0,3,5,9,12],目标= 2 输出:-1 说明:2不存在数字,因此返回-1
注意:
第一次尝试
class Solution(object):
count = 0;
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if (nums[count] == target):
return count;
elif(count +1 >len(nums)):
return -1;
else:
count += 1;
return search(self, nums, target);
我的第二次尝试是相同的确切代码,除了以下行: 计数= 0; 被放在函数定义之后: def搜索(自我,数字,目标):
输入:
nums = [-1,0,3,5,9,12] 目标= 9
预期答案:4
(第一次尝试)实际答案: 第10行:UnboundLocalError:赋值之前引用了本地变量'count'
(第二次尝试)实际答案: 第16行:NameError:未定义全局名称“搜索”
我在网上使用python查找了递归函数,但由于所有示例代码或多或少都是相同的,因此它并没有提供太多帮助。任何帮助将不胜感激!
答案 0 :(得分:2)
您的问题与递归无关,而与滥用类成员有关。
UnboundLocalError: local variable 'count' referenced before assignment
意味着您使用return count
和count += 1
,但从未将其初始化为任何东西。大概是您想在方法正文中进行count = 0
,还是使用self.count
。
NameError: global name 'search' is not defined
是因为您在错误地调用类方法。 self
在类方法上是特殊的,因此请执行search(self, nums, target)
而不是self.search(nums, target)
。
答案 1 :(得分:0)
您需要使用self.search,而且我认为还有一种更好的方法可以解决问题
该问题基本上与二进制搜索有关。您可以通过以下https://www.geeksforgeeks.org/binary-search/
了解更多信息我还将附加Python中的代码以及测试数据以供参考。希望对您有帮助
def binarySearch (nums, left, right, target):
if right >= left:
mid = left + (right - left)/2
if nums[mid] == target:
return mid
elif nums[mid] > target:
return binarySearch(nums, left, mid-1, target)
else:
return binarySearch(nums, mid + 1, right, target)
else:
return -1
nums = [-1,0,3,5,9,12]
target = 9
result = binarySearch(nums, 0, len(nums)-1, target)
print result