1. 程式人生 > 遊戲 >《坎巴拉太空計劃》增強版將於今年秋季登陸PS5/XS

《坎巴拉太空計劃》增強版將於今年秋季登陸PS5/XS

一、題目

給定一個按照升序排列的整數陣列 nums,和一個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。

如果陣列中不存在目標值 target,返回[-1, -1]

進階:
你可以設計並實現時間複雜度為O(log n)的演算法解決此問題嗎?

二、解法

思路:二分查詢。額外引數:尋找的是最左邊的還是最右邊的。

如果尋找的是最左邊的,優先查詢左邊劃分的部分。如果尋找的是最右邊的,優先查詢右邊劃分的部分。

class Solution {
    public int findValue(int[] nums,int left,int right,int target,boolean findFirst){
        int len=right-left+1;
        if(len==1){
            if(nums[left]==target) return left;
            else return -1;
        }else{
            int mid=left+(right-left)/2;
            if(findFirst){
                if(target>=nums[left]&&target<=nums[mid]){
                    return findValue(nums,left,mid,target,findFirst);
                }else if(target>=nums[mid+1]&&target<=nums[right]){
                    return findValue(nums,mid+1,right,target,findFirst);
                }else return -1; 
            }else{
                if(target>=nums[mid+1]&&target<=nums[right]){
                    return findValue(nums,mid+1,right,target,findFirst);
                }else if(target>=nums[left]&&target<=nums[mid]){
                    return findValue(nums,left,mid,target,findFirst);
                }else return -1;
            }            
        }
    }

    public int[] searchRange(int[] nums, int target) {
        if(nums.length==0) return new int[]{-1,-1};
        else return new int[]{findValue(nums,0,nums.length-1,target,true),
        findValue(nums,0,nums.length-1,target,false)};
    }
}