Leetcode練習(Python):數組類:第34題:給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。 你的算法時間復雜度必須是 O(log n) 級別。 如果數組中不存在目標值,返回 [-1, -1]。


題目:

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

你的算法時間復雜度必須是 O(log n) 級別。

如果數組中不存在目標值,返回 [-1, -1]。

思路:二分法,使用一個指針來找到數字的開頭和結尾位置

程序:

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        result = [-1,-1]
        length = len(nums)
        head = 0
        tail = length - 1
        while head < tail:
            middle = (head + tail) // 2
            if target > nums[middle]:
                head = middle + 1
            else:
                tail = middle
        if nums[head] != target:
            return result
        result[0] = head
        tail = length - 1
        while head <= tail:
            middle = (head + tail) // 2
            if target >= nums[middle]:
                head = middle + 1
            else:
                right = middle
        result[1] = head - 1
        return result


免責聲明!

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



猜您在找 在排序數組中查找元素的第一個和最后一個位置(給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。) 給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。 Leetcode練習(Python):數組類:第35題:給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。 你可以假設數組中無重復元素。 給定一個長度為N的數組,找出出現次數大於n/2,n/3的數,要求時間復雜度O(n),空間復雜度O(1) 對於一個有序數組,我們通常采用二分查找的方式來定位某一元素,請編寫二分查找的算法,在數組中查找指定元素。 給定一個整數數組A及它的大小n,同時給定要查找的元素val,請返回它在數組中的位置(從0開始),若不存在該元素,返回-1。若該元素出現多次,請返回第一次出現的位置。 Leetcode練習(Python):數組類:第53題:給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。進階: 如果你已經實現復雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。 兩個有序數組合並成一個有序數組(要求時間復雜度為O(n)) [java實現]找一個數組的最大和的連續子數組(時間復雜度 O(n)) Redis 時間復雜度O(n)級別的指令收集 給定一個整數sum,從n個有序的元素的數組中尋找a,b,使得a+b的結果最接近sum,最快的時間復雜度?
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM