成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

zsirfs / 919人閱讀

摘要:二分搜索復(fù)雜度時(shí)間空間思路其實(shí)就是執(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ù)雜度

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

思路

其實(shí)就是執(zhí)行兩次二分搜索,一次專門找左邊邊界,一次找右邊邊界。特別的,如果找左邊邊界時(shí),要看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 {
                // 對(duì)于找左邊的情況,要判斷左邊的數(shù)是否重復(fù)
                if(type == "front"){
                    if(mid == 0) return 0;
                    if(nums[mid] != nums[mid - 1]) return mid;
                    max = mid - 1;
                } else {
                // 對(duì)于找右邊的情況,要判斷右邊的數(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64648.html

相關(guān)文章

  • leetcode 34 Search for a Range

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

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

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

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

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

    Youngdze 評(píng)論0 收藏0
  • leetcode34 search for a range

    摘要:題目要求即在一個(gè)有序排列的數(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 評(píng)論0 收藏0
  • LeetCode】貪心算法--劃分字母區(qū)間(763)

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

    honhon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<