[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]
}