【LeetCode] 153は、最小回転ソートされた配列を探し

トピックへのリンク:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/

件名の説明:

配列に従って昇順は、以前は未知点に回転したと仮定する。

(例えば、配列[0,1,2,4,5,6,7]は[4,5,6,7,0,1,2]になることができます)。

最小の要素を検索します。

あなたは、配列内の要素のない重複がないと仮定することができます。

例:

例1:

输入: [3,4,5,1,2]
输出: 1

例2:

输入: [4,5,6,7,0,1,2]
输出: 0

アイデア:

二分法、二分法を見つけるのとすることでmid、ここで私たちが使用し、条件を決定しますright

以下のようnums[mid] > nums[right]に説明midにおける最小要素を示す、左側の増分領域> mid領域

ようにnums[mid] <= nums[right中間領域の右半分に示されている最小の要素を示す、インクリメントされる<= mid領域

ヒント:

一般的にはケースがあり、

ときにwhile left < right外部ループ出力

場合はwhile left <= right出力内を循環


関連した質問:154探し最小回転ソートされた配列II

コード:

class Solution:
    def findMin(self, nums: List[int]) -> int:
        left = 0
        right = len(nums) - 1 
        while left < right:
            mid = left + (right - left) // 2
            if nums[right] < nums[mid]:
                left = mid + 1
            else:
                right = mid 
        return nums[left]

ジャワ

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

おすすめ

転載: www.cnblogs.com/powercai/p/11284305.html