sean.jin
Spark Code Blog
sean.jin
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발공부
      • Kotlin
      • LeetCode
      • Algorithm
      • React
    • 주식차트
    • 책리뷰
    • 유틸리티

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 책리뷰
  • 경제
  • 주식투자
  • 트리플 위칭데이
  • 자기개발
  • 주식입문자
  • 부의 추월차선
  • 네마녀의날
  • 책
  • 오
  • 아빠와 딸의 주식투자 레슨
  • 초보
  • 책추천
  • 주식책리뷰
  • 변동성
  • 쿼드러플위칭데이

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sean.jin

Spark Code Blog

개발공부/LeetCode

[JavaScript]34. Find First and Last Position of Element in Sorted Array - 쉬운설명

2022. 3. 17. 10:47
반응형

34. Find First and Last Position of Element in Sorted Array

 

Given an array of integers nums sorted in non-decreasing order, find the starting and ending position of a given target value.

If target is not found in the array, return [-1, -1].

You must write an algorithm with O(log n) runtime complexity.

 

Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2: 

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]

Example 3: 

Input: nums = [], target = 0
Output: [-1,-1]

 

계획

문제 해결 전략

 

이 문제의 목표는 타겟넘버가 nums에 위치하는지 먼저 확인하고 있다면 그 인덱스 범위를 array형식으로 리턴해야합니다. 

 

만약 타겟넘버가 없다면 [-1, -1]을 리턴해야합니다. 

 

문제는 쉽지만 O(log n)속도인 코드로 짜야하기때문에  Medium문제인것같습니다. 

 

 

 

구현 전략

 

 

 

해설

function searchRange(nums, target) {챠ㅐㅠㅊ챠ㅠㅊ
      
      let res = [-1, -1];

      // find the left
      let l = 0;
      let r = nums.length - 1;
        
    //heapify같이 점점 mid pointer를 기준으로 타겟보다 작은지 큰지 비교
    //만약 midpointer가 타겟보다 작다면, left pointer를 증가 
    //반대로 mid pointerr가 타겟보다 크다면 right pointer감소 
      while (l < r) {//좁혀가며 결국 크로스되는시점 
        const mid = Math.floor((l + r) / 2);  // 중간값인덱스 구하기
        console.log(mid)
        if (nums[mid] < target) l = mid + 1; //accending order로 나타내기때문에, 만약 l포인터값이 타겟보다 작다면
          //l 포인터인덱스를 1늘린다. 
        
        else r = mid;
          
      }
    //왼쪽찾기
      if (nums[l] !== target) return res;
    
      else res[0] = l;

    //오른쪽 찾기
      r = nums.length - 1;  // no need to set l to 0

      while (l < r) {
        const mid = Math.ceil((l + r) / 2);   // note using Math.ceil
        console.log("2"+mid)
        if (nums[mid] > target) r = mid - 1;
        else l = mid;
      }

      res[1] = r;

      return res;
}
반응형

'개발공부 > LeetCode' 카테고리의 다른 글

[JavaScript] 33. Search in Rotated Sorted Array - 쉬운설명 바이너리 서치 활용  (0) 2022.03.19
[JavaScript]856. Score of Parentheses 쉬운설명, stack 사용  (0) 2022.03.17
[JavaScript] 946. Validate Stack Sequences 쉬운설명  (0) 2022.03.16
[JavaScript] 138. Copy List with Random Pointer, 해시맵 사용, 쉬운설명  (0) 2022.03.13
[JavaScript] 61. Rotate List Medium - 연결리스트 노드 옮기기, 쉬운설명, 반복문 사용  (0) 2022.03.13
    '개발공부/LeetCode' 카테고리의 다른 글
    • [JavaScript] 33. Search in Rotated Sorted Array - 쉬운설명 바이너리 서치 활용
    • [JavaScript]856. Score of Parentheses 쉬운설명, stack 사용
    • [JavaScript] 946. Validate Stack Sequences 쉬운설명
    • [JavaScript] 138. Copy List with Random Pointer, 해시맵 사용, 쉬운설명
    sean.jin
    sean.jin
    앱개발, 알고리즘, JS, Kotlin, 미국 취업준비

    티스토리툴바