34 在排序陣列中查詢元素的第乙個和最後乙個位置

2021-10-04 11:44:41 字數 1574 閱讀 3304

題目描述

解題思路

這道題乍一看很簡單啊,居然還是中等難度,雖然題目要求時間複雜度是o(log n),但是用普通o(n)的也過了。其實真正要考察的是二分查詢的思想

1、二分查詢思想

寫了乙個不太正宗的二分查詢,按道理時間複雜度應該還是o(n),但是提交上去效果還不錯,不知道咋回事。

public

int[

]searchrange

(int

nums,

int target)

else

if(nums[mid]

> target)

else

if(nums[mid]

== target);}

}}return

newint

;}

public

int[

]searchrange

(int

nums,

int target);}

intleft_bound

(int

nums,

int target)

else

if(nums[mid]

> target)

else

if(nums[mid]

== target)

}// 最後要檢查 left 越界的情況

if(left >= nums.length || nums[left]

!= target)

return-1

;return left;

}int

right_bound

(int

nums,

int target)

else

if(nums[mid]

> target)

else

if(nums[mid]

== target)

}// 最後要檢查 right 越界的情況

if(right <

0|| nums[right]

!= target)

return-1

;return right;

}

2、普通遍歷這個沒啥技術含量,很簡單

public

static

int[

]searchrange

(int

nums,

int target)

if(p <= q && nums[p]

== target)

return

newint

;else

return

newint

;}

34 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是o log n 級別。如果陣列中不存在目標值,返回 1,1 輸入 nums 5,7,7,8,8,10 target 8 輸出 3,4 輸入 nums 5,7,7,...

34 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8輸出 3,4 示例 2 輸入 n...

34 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8輸出 3,4 示例 2 輸入 n...