国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[Leetcode] Search for a Range 尋找區(qū)間

zsirfs / 921人閱讀

摘要:二分搜索復(fù)雜度時間空間思路其實就是執(zhí)行兩次二分搜索,一次專門找左邊邊界,一次找右邊邊界。如果找右邊邊界,則要判斷右邊一位的數(shù)是否相同。

Search for a Range

Given a sorted array of integers, find the starting and ending position of a given target value.

Your algorithm"s runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

For example, Given [5, 7, 7, 8, 8, 10] and target value 8, return [3, 4].

二分搜索 復(fù)雜度

時間 O(logN) 空間 O(1)

思路

其實就是執(zhí)行兩次二分搜索,一次專門找左邊邊界,一次找右邊邊界。特別的,如果找左邊邊界時,要看mid左邊一位的的數(shù)是否和當(dāng)前mid相同,如果相同要繼續(xù)在左半邊二分搜索。如果找右邊邊界,則要判斷右邊一位的數(shù)是否相同。

代碼
public class Solution {
    public int[] searchRange(int[] nums, int target) {
        // 找到左邊界
        int front = search(nums, target, "front");
        // 找到右邊界
        int rear = search(nums, target, "rear");
        int[] res = {front, rear};
        return res;
    }
    
    public int search(int[] nums, int target, String type){
        int min = 0, max = nums.length - 1;
        while(min <= max){
            int mid = min + (max - min) / 2;
            if(nums[mid] > target){
                max = mid - 1;
            } else if(nums[mid] < target){
                min = mid + 1;
            } else {
                // 對于找左邊的情況,要判斷左邊的數(shù)是否重復(fù)
                if(type == "front"){
                    if(mid == 0) return 0;
                    if(nums[mid] != nums[mid - 1]) return mid;
                    max = mid - 1;
                } else {
                // 對于找右邊的情況,要判斷右邊的數(shù)是否重復(fù)
                    if(mid == nums.length - 1) return nums.length - 1;
                    if(nums[mid] != nums[mid + 1]) return mid;
                    min = mid + 1;
                }
            }
        }
        //沒找到該數(shù)返回-1
        return -1;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64648.html

相關(guān)文章

  • leetcode 34 Search for a Range

    摘要:我們要找出這個目標(biāo)數(shù)字在數(shù)組中的存在區(qū)間,并以數(shù)組形式返回這個區(qū)間。要求題目必須在輸入數(shù)組和目標(biāo)值返回想法我們需要分別找出最左邊的這個元素的位置和最右邊的這個元素的位置。由于對于時間的要求,我們在進行查找的時候要采取二分查找。 題目詳情 Given an array of integers sorted in ascending order, find the starting and...

    Awbeci 評論0 收藏0
  • [Leetcode] Missing Ranges 缺失區(qū)間

    摘要:想象一下假設(shè)數(shù)組前有一段連續(xù)的負(fù)無窮到,數(shù)組后有一段到正無窮,這樣是等價與上下界的。最后循環(huán)到停止,當(dāng)下標(biāo)為時,我們將當(dāng)前指針指向,并判斷和數(shù)組末尾是否能構(gòu)成最后一個區(qū)間。 Missing Ranges Given a sorted integer array where the range of elements are [lower, upper] inclusive, retu...

    Gilbertat 評論0 收藏0
  • [Leetcode] Summary Ranges 統(tǒng)計區(qū)間

    摘要:雙層迭代法復(fù)雜度時間空間思路外層的循環(huán)控制每個的起點,內(nèi)層的循環(huán)控制之內(nèi)的遞增。每當(dāng)遍歷完一個,就把它記錄到結(jié)果中,并更新下一個的起點。這里的技巧是,判斷一個數(shù)是否是在內(nèi)的,只要就行了,即值之差等于下標(biāo)之差。 Summary Ranges Given a sorted integer array without duplicates, return the summary of it...

    Youngdze 評論0 收藏0
  • leetcode34 search for a range

    摘要:題目要求即在一個有序排列的數(shù)組中,找到目標(biāo)值所在的起始下標(biāo)和結(jié)束下標(biāo)。這樣一定可以找到目標(biāo)值的初始下標(biāo)同理,結(jié)合情況和情況,當(dāng)中間值大于目標(biāo)值,則將右指針左移至中間,否則將左指針右移至中間,這樣一定可以找到目標(biāo)值的結(jié)束下標(biāo)。 題目要求 Given an array of integers sorted in ascending order, find the starting and ...

    2shou 評論0 收藏0
  • LeetCode】貪心算法--劃分字母區(qū)間(763)

    摘要:寫在前面今天這篇文章是貪心算法系列的第三篇劃分字母區(qū)間。前文回顧貪心算法分發(fā)糖果刷題匯總匯總貼今日題目字符串由小寫字母組成。返回一個表示每個字符串片段的長度的列表。示例輸入輸出解釋劃分結(jié)果為。每個字母最多出現(xiàn)在一個片段中。 寫在前面 今天這篇文章是貪心算法系列的第三篇--劃分字母區(qū)間。 前文回顧: 【LeetCode】貪心算法--分發(fā)糖果(135) 刷題匯總: 【LeetCode】匯總...

    honhon 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<