LeetCode第三十四題 Python實現

2021-10-19 06:23:18 字數 2487 閱讀 4623

title: leetcode no.34

categories:

tags:

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

如果陣列中不存在目標值 target,返回 [-1, -1]。

高階:你可以設計並實現時間複雜度為 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]

0 <= nums.length <= 105

-109 <= nums[i] <= 109

nums 是乙個非遞減陣列

-109 <= target <= 109

class solution(object):

# 二分查詢邊界座標 如果沒有則返回[-1,-1]

# 查詢左側邊界

def leftbinarysearch(self,nums,l,r,target):

if nums[l] == target:

if l == 0:

return 0

elif nums[l-1] != target:

return l

elif nums[l-1] == target:

return self.leftbinarysearch(nums, l-1, r, target)

elif r > l:

mid = int((r+l)/2)

if nums[mid] > target:

return self.leftbinarysearch(nums, l, mid-1,target)

elif nums[mid] < target:

return self.leftbinarysearch(nums, mid+1, r, target)

elif nums[mid] == target:

return self.leftbinarysearch(nums, mid, r, target)

else:

return -1

# 查詢右側邊界

def rightbinarysearch(self,nums,l,r,target):

if nums[r] == target:

if r == len(nums)-1:

return len(nums)-1

elif nums[r + 1] != target:

return r

elif nums[r + 1] == target:

return self.rightbinarysearch(nums, l, r+1, target)

elif r > l:

mid = int((r + l) / 2)

if nums[mid] > target:

return self.rightbinarysearch(nums, l, mid - 1, target)

elif nums[mid] < target:

return self.rightbinarysearch(nums, mid + 1, r, target)

elif nums[mid] == target:

return self.rightbinarysearch(nums, l, mid, target)

else:

return -1

def searchrange(self, nums, target):

""":type nums: list[int]

:type target: int

:rtype: list[int]

核心思想:

由於給定的陣列是乙個非遞減陣列,因ic同樣可以使用33的中的二分法來查詢到target的左右邊界index

例子:[5,7,7,8,8,8,10], target = 8

左右邊界點分別為3、5

"""if len(nums) == 0:

return [-1,-1]

a = self.leftbinarysearch(nums,0,len(nums)-1,target)

b = self.rightbinarysearch(nums,0,len(nums)-1,target)

boundarylist =

return boundarylist

if __name__ == '__main__':

s = solution()

print(s.searchrange([5,7,7,8,8,10],8))

NeHe OpenGL第三十四課 地形

nehe opengl第三十四課 地形 從高度圖生成地形 這一課將教會你如何從乙個2d的灰度圖建立地形 歡迎來到新的一課,ben humphrey寫了這一課的 它是基於第一課所寫的。在這一課裡,我們將教會你如何使用地形,你將知道高度圖這個概念。下面我們來定義一些全域性變數,map size是你使用的...

NeHe OpenGL第三十四課 地形

nehe opengl第三十四課 地形 從高度圖生成地形 這一課將教會你如何從乙個2d的灰度圖建立地形 歡迎來到新的一課,ben humphrey寫了這一課的 它是基於第一課所寫的。在這一課裡,我們將教會你如何使用地形,你將知道高度圖這個概念。下面我們來定義一些全域性變數,map size是你使用的...

實習篇 第三十四天

為什麼直接寫三十四天,因為三十三那天過的太匆忙,上午好像又開了一次會議,下午便開始寫做任務!寫的東西都是第一次接觸的,難免有不懂不會的,然後師傅那邊又在忙他的事,就這樣過了一下午,下班後,我又趕著回學校參加明後兩天的畢業設計開題報告!真是 屋漏偏逢連夜雨 今天上午來到公司,任務剛做了一點,另乙個同事...