国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

34. 在排序數(shù)組中查找元素的第一個和最后一個位置

這篇具有很好參考價值的文章主要介紹了34. 在排序數(shù)組中查找元素的第一個和最后一個位置。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

難度:中等
給你一個按照非遞減順序排列的整數(shù)數(shù)組 nums,和一個目標值 target。請你找出給定目標值在數(shù)組中的開始位置和結(jié)束位置。

如果數(shù)組中不存在目標值 target,返回 [-1, -1]。

你必須設計并實現(xiàn)時間復雜度為 O(log n) 的算法解決此問題。

示例 1:
輸入:nums = [5,7,7,8,8,10], target = 8
輸出:[3,4]

示例 2:
輸入:nums = [5,7,7,8,8,10], target = 6
輸出:[-1,-1]

示例 3:
輸入:nums = [], target = 0
輸出:[-1,-1]

題目要求時間復雜度為O(logn),就是要我們使用二分法。
思路:
首先不斷二分找到一個nums[mid]==target的中間值,再分別在這個中間值的左右兩側(cè)內(nèi)繼續(xù)二分,直到找到最后一個等于target的值則結(jié)束。
分別定義一個用于找左右兩側(cè)的遞歸函數(shù),函數(shù)內(nèi)不斷二分。文章來源地址http://www.zghlxwxcb.cn/news/detail-413614.html

var searchRange = function(nums, target) {
    if(nums.length==0)  return [-1,-1]
    var left = 0
    var right = nums.length-1
    var arr = [-1,-1]
    while(left<=right){
        let mid = Math.floor((left+right)/2)
        if(nums[mid]==target){//找到這個值,則開始在這個值的左右兩側(cè)找
            let leftIndex = findLeft(nums,target,left,mid-1)
            let rightIndex = findRight(nums,target,mid+1,right)
            //如果沒找到,則左側(cè)的值就是mid
            if(leftIndex==-1)   leftIndex=mid
            //如果沒找到,則右側(cè)的值就是mid
            if(rightIndex==-1)  rightIndex=mid
            return [leftIndex,rightIndex]
        }else if(nums[mid]<target){
            left = mid + 1
        }else{
            right = mid -1
        }
    }
    return [-1,-1]
};
function findLeft(nums,target,left,right){
	//遞歸的結(jié)束條件
    if(left>right)  return -1
    let mid = Math.floor((left+right)/2)
    if(nums[mid]==target){
        let index = findLeft(nums,target,left,mid-1)
        //最后一層的遞歸結(jié)束,left-right=1,返回index=-1,則倒數(shù)第二層,left=right=mid,返回mid,此時mid就是要求的左側(cè)的值
        if(index==-1)   return mid
        return index
    }else{
        return findLeft(nums,target,mid+1,right)
    }
}
function findRight(nums,target,left,right){
    if(left>right)  return -1
    let mid = Math.floor((left+right)/2)
    if(nums[mid]==target){
        let index = findRight(nums,target,mid+1,right)
        if(index==-1)   return mid
        return index
    }else{
        return findRight(nums,target,left,mid-1)
    }
}

到了這里,關于34. 在排序數(shù)組中查找元素的第一個和最后一個位置的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • LeetCode 34 在排序數(shù)組中查找元素的第一個和最后一個位置

    在排序數(shù)組中查找元素的第一個和最后一個位置 給你一個按照非遞減順序排列的整數(shù)數(shù)組 nums ,和一個目標值 target 。請你找出給定目標值在數(shù)組中的開始位置和結(jié)束位置。 如果數(shù)組中不存在目標值 target ,返回 [-1, -1] 。 你必須設計并實現(xiàn)時間復雜度為 O(log n) 的算法解決此

    2024年02月02日
    瀏覽(25)
  • 二分查找實例1(在排序數(shù)組中查找元素的第一個和最后一個位置)

    二分查找實例1(在排序數(shù)組中查找元素的第一個和最后一個位置)

    給你一個按照非遞減順序排列的整數(shù)數(shù)組? nums ,和一個目標值? target 。請你找出給定目標值在數(shù)組中的開始位置和結(jié)束位置。 如果數(shù)組中不存在目標值? target ,返回? [-1, -1] 。 你必須設計并實現(xiàn)時間復雜度為? O(log n) ?的算法解決此問題。 示例 1: 示例?2: 示例 3: 提示

    2024年02月09日
    瀏覽(19)
  • 84.在排序數(shù)組中查找元素的第一個和最后一個位置(力扣)

    84.在排序數(shù)組中查找元素的第一個和最后一個位置(力扣)

    目錄 問題描述 代碼解決以及思想? 知識點? 初始化左邊界 left 為數(shù)組的起始位置(0),右邊界 right 為數(shù)組的結(jié)束位置( nums.size() - 1 )。 進入一個循環(huán),只要左邊界 left 不大于右邊界 right ,就執(zhí)行以下操作: a. 計算中間位置 middle ,這是為了進行二分查找,以避免整數(shù)溢

    2024年02月06日
    瀏覽(28)
  • 在排序數(shù)組中查找元素的第一個和最后一個位置(Java詳解)

    在排序數(shù)組中查找元素的第一個和最后一個位置(Java詳解)

    給你一個按照 非遞減 順序排列的整數(shù)數(shù)組? nums ,和一個目標值? target 。請你找出給定目標值在數(shù)組中的開始位置和結(jié)束位置。 如果數(shù)組中不存在目標值? target ,返回? [-1, -1] 。 你必須設計并實現(xiàn)時間復雜度為 ? O(log n) ?的算法解決此問題。 示例: 輸入:nums = [5,7,7,8,8

    2024年02月03日
    瀏覽(28)
  • 【算法Hot100系列】在排序數(shù)組中查找元素的第一個和最后一個位置

    【算法Hot100系列】在排序數(shù)組中查找元素的第一個和最后一個位置

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續(xù)學習,不斷總結(jié),共同進步,活到老學到老 導航 檀越劍指大廠系列:全面總

    2024年02月02日
    瀏覽(28)
  • 【LeetCode】每日一題&&兩數(shù)之和&&尋找正序數(shù)組的中位數(shù)&&找出字符串中第一個匹配項的下標&&在排序數(shù)組中查找元素的第一個和最后一個位置

    【LeetCode】每日一題&&兩數(shù)之和&&尋找正序數(shù)組的中位數(shù)&&找出字符串中第一個匹配項的下標&&在排序數(shù)組中查找元素的第一個和最后一個位置

    ========================================================================= 主頁點擊直達: 個人主頁 我的小倉庫: 代碼倉庫 C語言偷著笑: C語言專欄 數(shù)據(jù)結(jié)構(gòu)挨打小記: 初階數(shù)據(jù)結(jié)構(gòu)專欄 Linux被操作記: Linux專欄 LeetCode刷題掉發(fā)記: LeetCode刷題 算法: 算法專欄? C++頭疼記: C++專欄 計算機

    2024年02月08日
    瀏覽(36)
  • 「優(yōu)選算法刷題」:在排序數(shù)組中查找元素的第一個和最后個位置

    「優(yōu)選算法刷題」:在排序數(shù)組中查找元素的第一個和最后個位置

    給你一個按照非遞減順序排列的整數(shù)數(shù)組? nums ,和一個目標值? target 。請你找出給定目標值在數(shù)組中的開始位置和結(jié)束位置。 如果數(shù)組中不存在目標值? target ,返回? [-1, -1] 。 你必須設計并實現(xiàn)時間復雜度為? O(log n) ?的算法解決此問題。 示例 1: 示例?2: 示例 3: 二分

    2024年01月22日
    瀏覽(23)
  • 【leetcode題解C++】34.在排序數(shù)值中查找第一個和最后一個位置

    給你一個按照非遞減順序排列的整數(shù)數(shù)組? nums ,和一個目標值? target 。請你找出給定目標值在數(shù)組中的開始位置和結(jié)束位置。 如果數(shù)組中不存在目標值? target ,返回? [-1, -1] 。 你必須設計并實現(xiàn)時間復雜度為? O(log n) ?的算法解決此問題。 示例 1: 示例?2: 示例 3: 思路

    2024年01月16日
    瀏覽(23)
  • 代碼隨想錄額外題目| 數(shù)組03 ●34排序數(shù)組查首尾位置 ●922按奇偶排序數(shù)組II●35搜索插入位置

    代碼隨想錄額外題目| 數(shù)組03 ●34排序數(shù)組查首尾位置 ●922按奇偶排序數(shù)組II●35搜索插入位置

    #34排序數(shù)組查首尾位置 medium,我寫的:1 暴力 我寫的,做了個類似二分搜索的方法: 隨想錄:從兩頭都做類似二分搜索 #922?按奇偶排序數(shù)組II 我的解法,有點蠢: inplace解法: 把odd idx放的偶數(shù),給換到even idx放的奇數(shù) 注意j是從1開始,而且每輪i,j都是繼續(xù)增加不回去 空間表

    2024年02月15日
    瀏覽(27)
  • 【LeetCode】2619. 數(shù)組原型對象的最后一個元素

    【LeetCode】2619. 數(shù)組原型對象的最后一個元素

    請你編寫一段代碼實現(xiàn)一個數(shù)組方法,使任何數(shù)組都可以調(diào)用 array.last() 方法,這個方法將返回數(shù)組最后一個元素。如果數(shù)組中沒有元素,則返回 -1 。 你可以假設數(shù)組是 JSON.parse 的輸出結(jié)果。 示例 1 : 輸入: nums = [null, {}, 3] 輸出: 3 解釋:調(diào)用 nums.last() 后返回最后一個元

    2024年01月21日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包