ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [LeetCode/JAVA] 162. Find Peak Element
    ETC/Algorithm 2023. 9. 3. 15:33

    문제

    주변 보다 큰 요소를 peak 요소라 부르는데, 이 peak이라는 요소의 아무 인덱스나 반환하는 문제이다. 여기서 O(log n)을 만족하는 알고리즘을 사용해야한다.

    풀이

    배열의 요소의 주변은 왼쪽 오른쪽으로 생각할 수 있다. 이 둘 보다 클 때 peak이라는 요소가 되므로 이에 알맞는 알고리즘을 선택해야했고, 이분 탐색(bineary search) 알고리즘을 사용해서 풀이할 것이다.

    시작은 배열의 시작 0과 끝 nums.length - 1 에서 부터 시작할 것이다.

    배열의 중간을 구하기 위해 ( 왼쪽 인덱스 + 오른쪽 인덱스 ) / 2 를 계산하여 중간 인덱스 값을 구하고, 이 중간 인덱스의 위치한 nums의 요소를 오른쪽 요소와 비교한다. 만약 중간 값이 작다는 것은 오른쪽 값이 더 크므로, 왼쪽 인덱스를 중앙 + 1로 옮기고 중간 값이 더 클경우 오른쪽 인덱스를 중앙으로 옮긴다. 이를 반복한다.

    코드

    class Solution {
        public int findPeakElement(int[] nums) {
            int l = 0;
            int r = nums.length - 1;
    
            while (r > l) {
                int mid = (l + r) / 2;
                if (nums[mid] < nums[mid + 1]) {
                    l = mid + 1;
                } else {
                    r = mid;
                }
            }
            return r;
        }
    }

    댓글

Designed by black7375.