一个数组,其中最后一个元素的下一个元素是该数组的第一个元素,通常被称为圆形。
显然,不存在这样的机制来存储数据,数据仍将存储在连续的存储块中,而圆形数组更像是一种想法,而不是现实。
我们需要编写一个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]