본문 바로가기
Leetcode

162. Find Peak Element

by Doromi 2023. 11. 16.
728x90
반응형
어진 정수 배열에서 peak element를 찾는 문제입니다. Peak element는 해당 위치에서 좌우의 원소보다 큰 값을 갖는 원소를 의미합니다.

예를 들어, 배열 [1, 2, 3, 1]에서 3은 peak element입니다. 배열 [1, 2, 1, 3, 5, 6, 4]에서 6도 peak element입니다.
이 문제를 풀기 위한 일반적인 방법은 이진 검색(Binary Search)을 사용하는 것입니다. 이진 검색을 사용하면 O(log N)의 시간 복잡도로 peak element를 찾을 수 있습니다.

 

public int FindPeakElement(int[] nums) {
    if (nums.Length == 0) {
        return -1; // 배열이 비어있는 경우
    }

    // 배열의 길이가 1인 경우
    if (nums.Length == 1) {
        return 0;
    }

    int left = nums[0];
    int current = nums[1];
    int right = -2147483648;

    // 배열의 첫 번째 원소가 peak element인 경우
    if (left > current) {
        return 0;
    }

    for (int i = 2; i < nums.Length; i++) {
        right = nums[i];

        if (current > left && current > right) {
            return i - 1;
        }

        left = current;
        current = right;
    }

    // 배열의 마지막 원소가 peak element인 경우
    if (current > right) {
        return nums.Length - 1;
    }

    // 배열의 끝까지 도달했을 때
    return nums.Length-1; 
}
 Peak element는 해당 위치에서 좌우의 원소보다 큰 값을 갖는 원소를 의미합니다. 이 함수는 주어진 배열에서 peak element의 인덱스를 찾아 반환합니다.


배열이 비어있는 경우: 배열이 비어있으면 -1을 반환합니다.
배열의 길이가 1인 경우: 배열의 길이가 1이면 해당 원소의 인덱스 0을 반환합니다.
배열의 첫 번째 원소가 peak element인 경우: 첫 번째 원소가 두 번째 원소보다 크다면 0을 반환합니다.
그 외의 경우: 배열을 순회하면서 peak element를 찾아 해당 인덱스를 반환합니다.

마지막 부분에서 배열의 마지막 원소가 peak element인 경우에 대한 처리를 해주었습니다.
right 변수를 배열의 최소값보다 작은 값으로 초기화하고, 배열의 끝까지 도달했을 때에도 마지막 원소가 peak element인지 확인하여 올바른 결과를 반환하도록 하였습니다.
728x90
반응형

'Leetcode' 카테고리의 다른 글

98. Validate Binary Search Tree  (0) 2024.04.17
2089. Find Target Indices After Sorting Array  (0) 2024.03.27
160. Intersection of Two Linked Lists  (0) 2023.11.15
455. Assign Cookies  (0) 2023.11.10
144. Binary Tree Preorder Traversal  (0) 2023.11.09