JavaScript中圆形数组的下一个更大元素

圆形阵列

一个数组,其中最后一个元素的下一个元素是该数组的第一个元素,通常被称为圆形。

显然,不存在这样的机制来存储数据,数据仍将存储在连续的存储块中,而圆形数组更像是一种想法,而不是现实。

问题

我们需要编写一个JavaScript函数,该函数将Integers的循环数组arr作为第一个也是唯一的参数。

然后,该函数应构造并返回一个数组,该数组包含原始数组中每个对应元素的下一个更大的元素。数字的下一个更大数字(例如num)是数组中其下一个遍历顺序的第一个更大数字(在我们的情况下是正确的),这意味着我们可以循环搜索以找到下一个更大的数字。如果不存在,我们应该考虑-1。

例如,如果函数的输入为-

const arr = [7, 8, 7];

那么输出应该是-

const output = [8, -1, 8];

输出说明

比数组中的两个7大的是8,由于数组是圆形的,但对于8,没有更大的元素,因此我们为-1。

示例

为此的代码将是-

const arr = [7, 8, 7];
const nextGreaterElement = (arr = []) => {
   const res = [];
   const stack = [];
   if (!arr ||arr.length< 1){
      return res;
   };
   for (let i = 0; i < arr.length; i++) {
      while (stack.length > 0 && arr[stack[stack.length - 1]] < arr[i]) {
         const small = stack.pop();
         res[small] = arr[i];
      };
      stack.push(i);
   }
   for (let i = 0; i < arr.length; i++) {
      while (stack.length > 0 && arr[stack[stack.length - 1]] < arr[i]) {
         const small = stack.pop();
         res[small] = arr[i];
      };
   }
   const rem = stack.length;
   for (let i = 0; i < rem; i++) {
      res[stack.pop()] = -1;
      }
      return res;
   };
console.log(nextGreaterElement(arr));

代码说明:

如果在堆栈中找到一个大于一个的元素,则在数组上进行迭代时,会将res [small]设置为找到的当前较大的元素。

现在,我们再次从arr的开头开始,处理在上一个for循环中找不到下一个更大元素的元素。最后,仍然会有某些要素没有其下一个更大的要素。

输出结果

控制台中的输出将是-

[8, -1, 8]