585. 산맥 서열 중 최대치

1963 단어
묘사
n개의 정수 산맥 수조, 즉 먼저 증가하고 나중에 줄인 서열을 주고 산꼭대기(최대치)를 찾아라
예제
주어진 수조는 [1,2,4,8,6,3]이고, 주어진 수조는 [10,9,8,7]이며, 주어진 수조는 [10,9,8,7]이다.

코드


방법1
public class Solution {
    /**
     * @param nums a mountain sequence which increase firstly and then decrease
     * @return then mountain top
     */
    public int mountainSequence(int[] nums) {
        if (nums == null || nums.length == 0) {
            return -1;
        }

        int start = 0;
        int end = nums.length - 1;
        while (start + 1 < end) {
            int mid = start + (end - start) / 2;
            /*          
             *     nums[mid] < nums[mid - 1]  nums[mid] < nums[mid + 1];
             *   mid     ,start end    ,   
             *     if               
             *                     
             */
            //   mid     ,                      
            if (nums[mid] > nums[mid - 1]) {
                start = mid;
            }
            if (nums[mid] > nums[mid + 1]) {
                end = mid;
            }
            //        ;        
        }
        return Math.max(nums[start], nums[end]);
    }
}

방법2
// version 2:          ,    2  ,      
public class Solution {
    /**
     * @param nums a mountain sequence which increase firstly and then decrease
     * @return then mountain top
     */
    public int mountainSequence(int[] nums) {
        int left = 0, right = nums.length - 1;
        while (left + 1 < right) {
            int m1 = left + (right - left) / 2;
            int m2 = right - (right - m1) / 2;
            if (nums[m1] < nums[m2]) {
                left = m1 + 1;
            } else if (nums[m1] > nums[m2]) {
                right = m2 - 1;
            } else {
                left = m1;
                right = m2;
            }
        }
        return nums[left] > nums[right] ? nums[left] : nums[right];
    }
}

좋은 웹페이지 즐겨찾기