題目描述
解題思路
這道題乍一看很簡單啊,居然還是中等難度,雖然題目要求時間複雜度是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...