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