34. Find First and Last Position of Element in Sorted Array


一、題目

  1、審題

  2、分析

    求 target 在有序數組 nums 中出現的最小下標和最大下標組成的數組。否則返回 {-1, -1}。時間復雜度為 O(log n)。

 

二、解答

  1、思路:

    時間復雜度為 O(log n),想到用二分法。要求所在下標組合,則需在求得 target時在向前、向后查找 target,直至找到 target 出現的最大、最小下標。

class Solution {
    public int[] searchRange(int[] nums, int target) {

        int len = nums.length;
        int[] result = new int[]{-1, -1};
        int low = 0;
        int high = len - 1;

        if(len == 0)
            return result;
        if(target < nums[low] || target > nums[high])
            return result;

        while(low < high) {
            int median = (low + high) / 2;

            if(nums[median] > target)
                high = median - 1;
            else if(nums[median] < target)
                low = median + 1;
            else {
                low = median;
                high = median;
                while(low - 1 >= 0 && nums[low - 1] == target) low--;
                while(high + 1 < len && nums[high + 1] == target) high++;
                break;
            }
        }
        
        if(nums[low] == target) {
            result[0] = low;
            result[1] = high;    
        }
                    
        return result;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM