我有这个练习来自“思考 java,如何像计算机科学家一样思考”。艾伦 B 唐尼:
编写一个名为的方法
maxInRange
,它接受一个整数数组和一个索引范围(lowIndex
和highIndex
),并在数组中找到最大值,只考虑和之间的元素lowIndex
,highIndex
包括两端。这种方法应该是递归的。如果范围的长度是
1
,即如果lowIndex == highIndex
,我们立即知道范围中的唯一元素必须是最大值。所以这是基本情况。如果范围内有多个元素,我们可以将数组分成两部分,在每一部分中找到最大值,然后找到最大值中的最大值。
我在 python 中提出了一个接近但非常不准确的答案:
cycles=0
def max_in_range(lst,low,high):
'''
Could not be able to make it work correctly
'''
global cycles
cycles+=1
if low==high:
#print "Cycles: ",cycles
return lst
else:
max_left=max_in_range(lst[low:len(lst)/2+1],low+1,high)
max_right=max_in_range(lst[len(lst)/2:len(lst)],low+1,high)
return max_right if max_right>max_left else max_left
lst=[112,32,45,71238,9999,45,12,6,3] # always Returns the mid element.
print max_in_range(lst,0,10)
def max(lst):
global cycles
cycles+=1
if len(lst)==1:
print "Cycles: ",cycles
return lst[0]
else:
m=max(lst[1:])
return m if m> lst[0] else lst[0]
print max(lst)
与问题要求的功能相比,该max
功能非常简单,即该功能
是递归的,采用两个限制并在运行时拆分列表。该max_in_range
函数始终
返回数组中的中间元素,即9999
.
我需要一些关于如何满足问题要求的指示。在 Java 或 Python 或任何其他类似 C 的语言中。