用于数组中局部极值数量的 Python 程序
在本文中,我们将学习一个用于数组中局部极值数量的 Python 程序。
极值是大于或小于其两个邻居的元素。
假设我们取了一个包含 n 个元素的数组。现在我们将在指定的输入数组中找到局部极值的数量。
注意
第一个和最后一个元素不是极值。
使用 For 循环
注意
array[0] 和 array[n-1] 都只有一个邻居,因此它们既不是最小值也不是最大值。
len() − 对象中的项目数由 len() 方法返回。当对象是字符串时,len() 函数返回字符串中的字符数。
算法(步骤)
以下是执行所需任务所要遵循的算法/步骤。 −
创建一个函数findExtrema(),通过接受输入数组和数组长度作为参数,返回数组中的局部极值。
创建一个变量来存储数组中局部极值的数量。
使用for循环,使用len()函数从数组的第一个元素遍历到数组的长度。
在任何给定时间,以下条件中只有一个为真:a[i] 大于邻居或小于邻居。
使用if条件语句检查a[i]是否大于其两个邻居,并将结果添加到计数中。
同样,使用if条件语句检查a[i]是否小于其两个邻居,并将结果添加到计数中将结果添加到计数中。
使用 return 语句返回计数。
创建一个变量来存储输入数组并打印给定的输入数组。
使用 len() 函数(对象中的项目数)获取输入数组的长度。
通过将输入数组和数组长度作为参数传递给 findExtrema() 函数来调用该函数,以打印数组中局部极值的数量。
示例
以下程序使用 for 循环返回数组中局部极值的数量 −
# 创建一个返回局部极值的函数 # 通过接受输入数组、 # 数组长度作为参数在数组中 def findExtrema(inputArray, arrayLength): # 将局部极值的数量存储在数组中 outputCount = 0 # 从第一个索引遍历到给定数组的长度 for k in range(1, arrayLength - 1): # 在任何给定时间,以下条件中只有一个为真: # a[i] 大于邻居或小于邻居。 # 检查 a[i] 是否大于其两个邻居 # 如果条件为真,则将输出计数增加 1 # 否则,如果条件为假,则将输出计数增加 0(相同值) outputCount += (inputArray[k] > inputArray[k - 1] and inputArray[k] > inputArray[k + 1]) # 检查 a[i] 是否小于其两个邻居 outputCount += (inputArray[k] < inputArray[k - 1] and inputArray[k] < inputArray[k + 1]) # 返回给定数组的局部极值的数量 返回 outputCount # 输入数组 inputArray = [5, 0, 1, 2, 1, 0, 3, 4, 1, 2] # 获取数组的长度 arrayLength = len(inputArray) # 打印给定的数组 print("给定的数组是:", inputArray) # 通过将 # 输入数组和数组长度作为参数传递给 findExtrema() 函数来调用它。 print("局部极值的数量为:", findExtrema(inputArray, arrayLength))
输出
执行时,上述程序将生成以下输出 -
给定的数组为:[5, 0, 1, 2, 1, 0, 3, 4, 1, 2] 局部极值的数量为:5
时间复杂度:O(n)
辅助空间:O(1)
因为没有使用更多空间,所以空间复杂度为 O. (1)。
因为我们只使用 for 循环遍历列表,所以时间复杂度为 O(N),其中 N 是给定列表中元素的数量或数组。
结论
在本文了解了局部极值之后,我们使用 Python 的 for 循环实现了同样的问题。