leetcode-496. 下一個更大元素 I
阿新 • • 發佈:2022-01-03
題目
解法
遍歷一遍 nums2
, 算出來每個元素的下一個最大元素,然後遍歷 nums1
取結果
暴力解法:
class Solution { /** * @param Integer[] $nums1 * @param Integer[] $nums2 * @return Integer[] */ function nextGreaterElement($nums1, $nums2) { if (empty($nums2) || empty($nums1)) { return []; } $pairRet = []; $toPair = []; foreach ($nums2 as $key => $n2) { foreach ($toPair as $key => $item) { if ($item < $n2) { $pairRet[$item] = $n2; unset($toPair[$key]); } } $toPair[] = $n2; } $ret = []; foreach ($nums1 as $item) { $ret[] = $pairRet[$item] ?: -1; } return $ret; } }
單調棧
function nextGreaterElement($nums1, $nums2) { if (empty($nums2) || empty($nums1)) { return []; } $n2Ret = []; $stack = []; foreach ($nums2 as $key => $n2) { if (empty($stack)) { $stack[] = $n2; } else { // 維護一個棧,裡面的值總是遞減的單調棧 while (!empty($stack) && $stack[count($stack) - 1] < $n2) { $n2Ret[array_pop($stack)] = $n2; } $stack[] = $n2; } } $ret = []; foreach ($nums1 as $item) { $ret[] = $n2Ret[$item] ?: -1; } return $ret; }
參考
本文來自部落格園,作者:吳丹陽-cn,轉載請註明原文連結:https://www.cnblogs.com/wudanyang/p/15758594.html