Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

หาตัวอักษรที่มากกว่าเป้าหมายและน้อยที่สุดในอาร์เรย์ที่เรียงแล้ว (JavaScript)

ปัญหา

ได้รับอาร์เรย์ตัวอักษรพิมพ์เล็กที่เรียงลำดับแล้ว 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