162. Find Peak Element

JJ·2021년 1월 9일
0

Algorithms

목록 보기
57/114
class Solution {
    public int findPeakElement(int[] nums) {
        
        if (nums.length == 0) return 0; 
        
        int prev = nums[0];
        int loc = 0;
        boolean isIncrease = false; 
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] < prev && isIncrease) {
                return i - 1;
            } else if (nums[i] > prev) {
                isIncrease = true; 
                loc = i; 
            } else if (nums[i] < prev) {
                isIncrease = false;
            }
            prev = nums[i];
        }
        
        if (isIncrease) return loc;
        else return 0; 
    }
}

Runtime: 0 ms, faster than 100.00% of Java online submissions for Find Peak Element.
Memory Usage: 39.8 MB, less than 5.40% of Java online submissions for Find Peak Element.

예에
혼자 힘으로 풀었는데 너무 쉽게 푼듯 (linear search)

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

우리의 friend 재귀 이용방식

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

재귀를 binary search로 둔갑한 방식

0개의 댓글