JSFiddle - React, Tailwind, and code Playground
by Yurii Predborskyi
JavaScript
function findNext(left, right, target, direction) {
while (left < right) {
let mid = Math.floor((left + right) / 2);
if (nums[mid] === target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
if (direction > 0) {
return (nums[right] > target && right + 1 < nums.length) ? right + 1 : right;
} else {
return (nums[left] > target && left - 1 > 0) ? left - 1 : left;
}
}
let nums = [1, 2, 3, 5];
let target = 4;
console.log('expected: 2 calculated', findNext(0, nums.length - 1, target, -1));
console.log('expected: 3 calculated', findNext(0, nums.length - 1, target, 1));