1. 程式人生 > 其它 >LeetCode——劍指 Offer II 069. 山峰陣列的頂部(Java)

LeetCode——劍指 Offer II 069. 山峰陣列的頂部(Java)

題目描述

題幹:
符合下列屬性的陣列 arr 稱為 山峰陣列(山脈陣列) :
arr.length >= 3
存在 i(0 < i< arr.length - 1)使得:
arr[0] < arr[1] < ... arr[i-1] < arr[i]
arr[i] > arr[i+1] > ... > arr[arr.length - 1]
給定由整陣列成的山峰陣列 arr ,返回山峰頂部的下標 i

示例 1:
輸入:arr = [0,1,0]
輸出:1

示例 2:
輸入:arr = [1,3,5,4,2]
輸出:2

示例 3:
輸入:arr = [0,10,5,2]
輸出:1

示例 4:
輸入:arr = [3,4,5,1]
輸出:2

示例 5:
輸入:arr = [24,69,100,99,79,78,67,36,26,19]
輸出:2

題解思路

返回山峰頂部的下標,因為返回下標所以我們不能進行排序,不過陣列已經是山峰陣列我們可以直接遍歷

從頭開始遍歷,直到遇到一個數字比後面的數字大的下標,就可以返回當前下標了

當然這種遍歷的問題肯定離不開二分查詢,這裡的條件還是當前數字比後面數字大就移動標誌

正確程式碼

    public int peakIndexInMountainArray(int[] arr) {
        int left = 0, right = arr.length, ans = 0;
        while (left <= right) {
            int mid = left + (right - left) / 2;

            if (arr[mid] > arr[mid + 1]) {
                ans = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    }

總結

無數的題目告訴我不是隻有排序的陣列才能用二分查詢,但是每次這種奇怪規律的條件就很容易繞

如果文章存在問題或者有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見