바위타는 두루미

[leetcode]162. Find Peak Element 본문

Study/Algorithm

[leetcode]162. Find Peak Element

DoRoMii 2019. 8. 10. 15:38
728x90

162. Find Peak Element

 

A peak element is an element that is greater than its neighbors.

Given an input array nums, where nums[i] ≠ nums[i+1], find a peak element and return its index.

The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

You may imagine that nums[-1] = nums[n] = -∞.

Example 1:

Input: nums = [1,2,3,1] Output: 2

Explanation: 3 is a peak element and your function should return the index number 2.

 

Example 2:

Input: nums = [1,2,1,3,5,6,4] Output: 1 or 5

Explanation: Your function can return either index number 1 where the peak element is 2,   or index number 5 where the peak element is 6.

 

Note:

Your solution should be in logarithmic complexity.

 

solution 1 

좌우 살피기 pick인지

 

souluton 2

사실 내려가는 점만 찾으면 됨

class Solution(object):
    def findPeakElement(self, nums):
        if len(nums) < 2: return 0
        n = len(nums)
        for i in range(n):
            if i < n -1 and nums[i + 1] < nums[i]: return i
        return n - 1

solution 3

logarithmic coplexity를 위한 이진탐색법 

while <=잊지말기

class Solution(object):
    def findPeakElement(self, nums):
        len_nums = len(nums)
        if len_nums <2:
            return 0
        if nums[0]>nums[1]:
            return 0
        if nums[-1]>nums[-2]:
            return len_nums -1
        l = 1
        r = len_nums-2
        while l <= r:
            mid = (l+r)//2
            if nums[mid] >= nums[mid-1] and nums[mid]>= nums[mid+1]:
                return mid
            if nums[mid-1] < nums[mid+1]:
                l = mid+1
            else :
                r = mid-1
        return -1

https://leetcode.com/problems/find-peak-element

Comments