48.回転した順序付き配列でターゲット値を見つけます

 

タイトル説明

回転された順序付けられた配列を考えると、事前に配列がどれだけ回転されたかはわかりません
(たとえば、0 1 2 4 5 67は45 6 7 0 1 2になる可能性があります)。
指定されたターゲットを検索します。配列内の値。配列内で見つかった場合はそのインデックスを返し、それ以外の場合は-1を返します。
配列に重複がないと仮定します。

[3,2,1],1

例1

入る

[1],0

戻り値

-1

例2

入る
 

[3,2,1],1

戻り値

2

 

アイデア:真ん中の数字が右端の数字よりも小さい場合は、右半分が順番になります。真ん中の数字が右端の数字よりも大きい場合は、左半分が順番になります。最初と最後の2つだけを使用する必要があります。順序付けられた半分で。ターゲット値がこの領域にあるかどうかを判別するための配列。これにより、保持する半分を判別できます。

コードの実装

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

 

おすすめ

転載: blog.csdn.net/xiao__jia__jia/article/details/113528686