Skip to content

[Leetcode] 34. Find First and Last Position of Element in Sorted Array โ€‹

#์ด์ง„ํƒ์ƒ‰

Problem โ€‹

๋ฌธ์ œ ๋งํฌ

์ •๋ ฌ๋œ ์ˆซ์ž ๋ฐฐ์—ด์ด ์ฃผ์›Œ์ง€๊ณ  ์ฐพ๊ณ ์žํ•˜๋Š” ๊ฐ’์ด ์ฃผ์–ด์ง„๋‹ค.
์ฐพ๊ณ ์žํ•˜๋Š” ๊ฐ’์˜ ์ฒ˜์Œ ์ธ๋ฑ์Šค์™€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. O(log n)

Solution โ€‹

O(logn) ์œผ๋กœ ํ’€๊ธฐ์œ„ํ•ด์„œ ์ด์ง„ํƒ์ƒ‰์„ ์ด์šฉํ•จ.

๊ฐ€์žฅ ์™ผ์ชฝ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๋Š” ์ด์ง„ํƒ์ƒ‰๊ณผ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์˜ ํƒ€๊ฒŸ์„ ์ฐพ๋Š” ์ด์ง„ํƒ์ƒ‰ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
์ด๋•Œ ๊ตฌํ•œ ์ธ๋ฑ์Šค ๊ฐ’์ด ํƒ€๊ฒŸ๊ฐ’๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•ด ๋ฐฐ์—ด๋‚ด์— ํƒ€๊ฒŸ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ.

JS Code โ€‹

js
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var searchRange = function(nums, target) {
  
  function getLeftIndex () {
    let left = 0, right = nums.length
    while (left < right) {
      const mid = Math.floor((left + right) / 2)
  
      if (nums[mid] < target) left = mid + 1
      else right = mid
    }
    return left
  }

  function getRightIndex () {
    let left = 0, right = nums.length
    while (left < right) {
      const mid = Math.floor((left + right) / 2)
  
      if (nums[mid] <= target) left = mid + 1
      else right = mid
    }
    return left -1
  }

  const left = getLeftIndex()
  const right = getRightIndex()
  if (nums[left] !== target) return [-1,-1]
  return [left,right]
}