javascript - 在不拆分数组或创建新数组的情况下搜索数组以查找峰值的最佳方法,javascript

标签 javascript arrays search

我有一个工作峰值搜索函数,它将数组作为参数,然后返回该数组的峰值。我需要找到主峰,然后是左峰和右峰。然后我需要能够继续寻找峰值。这意味着,用户点击一个按钮,每次点击
按钮,传入数组以查找下一个峰值。例如
arr = [1,5,25,7,8,3,34,8,9,9,91,7,3,7,8,4,1,39,0,3,7,8,14,2 ]
调用上面的寻峰功能,91为主峰,39为右峰,34为左峰。现在再次按下按钮,右峰值应为 14,左峰值应为 25。依此类推,每次向左或向右搜索峰值。我的问题是我的初始数组中有大约 500,000 个值。最初,我每次都拆分数组,所以我有 500,000 个值的主数组,然后是 250k 左右的数组。现在我持有一百万个值,这个数字只会随着我继续寻找越来越多的峰值而增长。我只需要搜索主数组,搜索主峰,然后向左搜索 x 值,向右搜索 x 值。我不确定我是否需要 2 个单独的函数,或者我是否可以从峰值递减并递增以获得两个值。或者使用输入创建一个新的峰值搜索功能
数组、起始索引和停止索引,然后从那里搜索。我的峰值搜索功能工作正常,并在传入数组时返回正确的峰值。
这是我当前的工作峰值搜索功能

 function find_the_peaks(nums) {
      if (!nums.length) return -1; //break
      //else init variables to be used for specific points
      var left = 0;
      var right = nums.length - 1;
      var mid1 = 0;
      var mid2 = 0;
      //compare points to find where there is the greatest difference in change, finding the highest delta
      while (left < right) {
        mid1 = Math.floor((left + right) / 2);
        mid2 = mid1 + 1;
        if (nums[mid1] < nums[mid2]) {
          left = mid2;
        } else {
          right = mid1;
        }
      }
      return left;
    //return point with the greatest change, aka the next highest peak
    };
我不认为这是重复的,因为尽管还有其他关于峰值搜索的问题,但所有这些都进行多次搜索需要您在某个点拆分数组。
我的一个想法是找到每个峰值并将所有峰值存储在一个数组中,从那里找到峰值作为最大值,然后根据用户想要的方式向左或向右移动一个。但我不知道我将如何做到这一点。

最佳答案

    function find_all_the_peaks(arr) {
    var peak;
        return arr.reduce(function(peaks, val, i) {
    if (arr[i+1] > arr[i]) {
        peak = arr[i+1];
    } else if ((arr[i+1] < arr[i]) && (typeof peak === 'number')) {
        peaks.push(peak);
        peak = undefined;
    }
        return peaks;
    }, []);
};
这仅返回数组格式的峰列表。

关于javascript - 在不拆分数组或创建新数组的情况下搜索数组以查找峰值的最佳方法,javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67571079/

相关文章:

arrays - 拆箱、(稀疏)矩阵和 haskell 向量库

ruby - 我可以或应该通过 ruby​​ 中的 object_id 属性找到一个对象吗?

c - 我似乎无法打印出字符类型矩阵

javascript - 如何在类似于 Python timeit 的 JavaScript 中计时函数

php - 如何制作带有联系时间限制的联系页面

javascript - 如何将选择下拉列表附加到 HTML 数据表?

arrays - 在字典中列出作为模板定义

c# - 从多个列表或数组中搜索/过滤(可能数十亿)项目组合的最佳方式

php - 如何使用 PHP/MySQL 搜索其他变量的特定内容?

javascript - 使用 Angular 从安全端点流式传输视频