2
* @param {number[]} arr5
var oddEvenJumps = function (arr) {7
const len = arr.length;8
const map = {}; // { value: index }9
const memo = new Array(2).fill(null).map((i) => new Array(len).fill(false));11
// Build a BST to maintain logN search/Insert12
function treeNode(value) {18
const root = new TreeNode(arr[len - 1]);20
function InsertToBST(val) {23
if (!node.right) node.right = new TreeNode(val);27
if (!node.left) node.left = new TreeNode(val);35
memo[0][len - 1] = memo[1][len - 1] = true;36
map[arr[len - 1]] = len - 1;41
function getNextBig(base) {43
if (map[base] !== undefined) {46
let result = Infinity;50
if (node.val > base && node.val < result) {55
if (node.val < base) {62
return result === Infinity ? false : result;65
function getNextSmall(base) {67
if (map[base] !== undefined) {70
let result = -Infinity;74
if (node.val < base && node.val > result) {79
if (node.val > base) {86
return result === -Infinity ? false : result;89
for (let i = len - 2; i >= 0; i--) {90
let nextBig = getNextBig(arr[i]);91
let nextSmall = getNextSmall(arr[i]);93
memo[0][i] = nextBig ? memo[1][map[nextBig]] : nextBig;94
memo[1][i] = nextSmall ? memo[0][map[nextSmall]] : nextSmall;99
return memo[0].filter((boo) => boo).length;