📜  数组中局部极值数的Javascript程序(1)

📅  最后修改于: 2023-12-03 14:54:59.192000             🧑  作者: Mango

数组中局部极值数的JavaScript程序

在JavaScript中,可以使用简单的算法来查找数组中的局部极值数。 局部极值数是指数组中某个元素大于或小于其相邻元素的值。

算法
  1. 定义一个计数器i,并从1开始遍历整个数组。 如果i等于数组长度,则停止遍历。
  2. 检查前一个元素与当前元素的大小关系。如果前一个元素小于当前元素,则继续检查下一个元素。
  3. 如果前一个元素大于或等于当前元素,则当前元素就是一个局部极小值。将当前元素存储在一个数组中。
  4. 从当前位置开始,检查后续元素的大小关系。如果所遍历的元素等于数组最后一个元素,则停止遍历。
  5. 如果后续元素小于当前元素,则当前元素是一个局部极大值。将当前元素存储在一个数组中。然后将计数器i更新为当前元素的位置。继续从下一个元素开始遍历。
  6. 如果后续元素大于或等于当前元素,则当前元素不是局部极值数。将计数器i更新为当前位置,并继续从下一个元素开始遍历。
代码实现(JavaScript)
function findLocalExtrema(array) {
  var localMin = [],
      localMax = [];
  for(var i = 1; i < array.length; i++){
    if(array[i-1] < array[i]) continue;
    if(array[i-1] >= array[i]) localMin.push(array[i]);
    while(array[i+1] === array[i] && i < array.length-1) i++;
    if(array[i+1] < array[i]) localMax.push(array[i]);
    else if(array[i+1] >= array[i]) i++;
  }
  return {min: localMin, max: localMax};
}
代码解析

函数findLocalExtrema接受一个包含数字类型的数组参数。此函数具有两个数组本地极大值和本地极小值,并返回所有本地极值。 算法中的步骤在函数内部实现。

其中,localMinlocalMax是两个空数组,用于存储本地最小值和本地最大值。然后,我们使用一个循环语句,遍历整个数组。

在第一步中,我们检查前一个元素是否小于当前元素。如果是,则继续检查下一个元素。如果不是,则将当前元素添加到本地最小值数组中。

下一步,我们从当前位置开始,继续遍历数组。如果后续元素小于当前元素,则当前元素就是一个本地最大值。将其添加到本地最大值数组中。并且我们将计数器i更新为当前位置,并继续从下一个元素开始遍历。如果后续元素大于或等于当前元素,则当前元素不是本地最大值。此时,我们将计数器i更新为当前位置,并继续从下一个元素开始遍历。

最后,函数将返回包含本地最小值和本地最大值的对象。

结论

此算法简单有效,用于查找简单的局部最大/最小值。该算法的时间复杂度为O(n)。