我正在学习使用Python查找数组中最长的峰。 这是可行的代码:
def longestPeak(array):
i = 1
currentPeakLength = 0
longestPeakLength = 0
while i < len(array) - 1:
isPeak = array[i] > array[i - 1] and array[i] > array[i + 1]
if not isPeak:
i += 1
continue
leftIdx = i - 2
while leftIdx >= 0 and array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1
rightIdx = i + 2
while rightIdx <= len(array) - 1 and array[rightIdx] < array[rightIdx - 1]:
rightIdx += 1
currentPeakLength = rightIdx - leftIdx - 1
if currentPeakLength > longestPeakLength:
longestPeakLength = currentPeakLength
i = rightIdx
return longestPeakLength
现在,当我尝试自己做时,我更改了这一部分:
leftIdx = i - 2
while leftIdx >= 0 and array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1
rightIdx = i + 2
while rightIdx <= len(array) - 1 and array[rightIdx] < array[rightIdx - 1]:
rightIdx += 1
进入:
leftIdx = i - 2
while leftIdx >= 0:
if array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1
rightIdx = i + 2
while rightIdx <= len(array) - 1:
if array[rightIdx] < array[rightIdx - 1]:
rightIdx += 1
然后我进入无限循环,现在我仍然很困惑... 预先感谢。
答案 0 :(得分:1)
假设此处leftIdx >= 0
当前为True
:
while leftIdx >= 0 and array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1
当array[leftIdx] < array[leftIdx + 1]
为False
时将停止循环
while leftIdx >= 0:
if array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1
将使循环继续进行,但不会对该迭代执行leftIdx -= 1
。