ปัญหา
ได้รับอาร์เรย์ตัวอักษรพิมพ์เล็กที่เรียงลำดับแล้ว letters และตัวอักษรเป้าหมาย target ต้องการหาตัวอักษรในอาร์เรย์ที่มีค่าน้อยที่สุดแต่ยังมากกว่า target โดยถ้าหมดตัวอักษรที่มากกว่า ให้วนกลับมาที่ตัวแรก (wrap around)
ตัวอย่าง
const arr = ["c", "f", "j"]; const target = "a";
ผลลัพธ์: "c"
โค้ดตัวอย่าง (Binary Search)
const arr = ["c", "f", "j"];
const target = "a";
const findNearestLetter = (arr = [], target = '') => {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
let mid = left + (right - left) / 2;
if (arr[mid] <= target) {
left++;
} else {
right--;
}
}
if (left == arr.length) {
return arr[0];
}
return arr[left];
};
console.log(findNearestLetter(arr, target));
ผลลัพธ์
c