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));