[리트코드] 704. Binary Search




리트코드

나의 풀이

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function (nums, target) {
  let start = 0;
  let end = nums.length - 1;
  let mid;
  while (start <= end) {
    mid = Math.floor((start + end) / 2);
    if (nums[mid] == target) {
      return mid;
    } else if (nums[mid] > target) {
      end = mid - 1;
    } else if (nums[mid] < target) {
      start = mid + 1;
    }
  }
  return -1;
};

console.log(search([-1, 0, 3, 5, 9, 12], 9));

Runtime: 129 ms, faster than 7.32% of JavaScript online submissions for Binary Search.



효율성 좋은 코드

var search = function (nums, target) {
  let start = 0;
  let end = nums.length - 1;
  let mid;
  while (start <= end) {
    mid = Math.floor((start + end) / 2);
    let num = nums[mid];
    if (num == target) return mid;
    else if (num > target) end = mid - 1;
    else if (num < target) start = mid + 1;
  }
  return -1;
};

Runtime: 76 ms, faster than 81.29% of JavaScript online submissions for Binary Search.



nums[mid]를 변수에 할당해주기만 해도 성능이 훨씬 좋아졌다.
그런데 동일한 코드를 돌렸음에도 실행 속도가 두배가 차이가 났다.
리트코드에 submit할 때의 네트워크 속도나 cpu 점유율에 따라서 같은 코드여도 결과가 달라질 수 있나보다ㅠ