描述
給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。
如果陣列中不存在目標值 target,返回 [-1, -1]。
高階:你可以設計並實現時間複雜度為 o(log n) 的演算法解決此問題嗎?
鏈結
34. 在排序陣列中查詢元素的第乙個和最後乙個位置 - 力扣(leetcode) (leetcode-cn.com)
解法一:標準二分法
1解法二:二分法,盡量向左壓縮class
solution ;
1213}14
15//
尋找目標值在陣列中的開始位置
16private
int findbeginpostion(int nums , int
target)
4142
//否則,說明 mid 的左邊依然有元素值等於 target
43//
那麼 mid 就不是 target 的起始位置,需要在 mid 的左邊進行查詢
44//
所以縮小範圍為 left 到 mid - 1
45//
當前區間的左側為 left,右側 right = mid - 1
46 right = mid - 1;
4748
//如果中間位置的元素值大於目標值 target
49//
說明需要在 mid 的左邊進行查詢
50 }else
if( nums[mid] >target)else65}
6667
//如果迴圈結束後還沒有返回,說明找不到目標值 target,返回 -1
68return - 1;69}
7071
//尋找目標值在陣列中的結束位置
72private
int findendpostion(int nums , int
target)
9697
//否則,說明 mid 的右邊依然有元素值等於 target
98//
那麼 mid 就不是 target 的結束位置,需要在 mid 的右邊進行查詢
99//
所以縮小範圍為 mid + 1 到 right
100//
當前區間的左側為 left = mid + 1 ,右側為 right
101 left = mid + 1;
102103
//如果中間位置的元素值大於目標值 target
104//
說明需要在 mid 的左邊進行查詢
105 }else
if( nums[mid] >target)else
120}
121122
//如果迴圈結束後還沒有返回,說明找不到目標值 target,返回 -1
123return - 1;
124}
125126 }
1題解鏈結演算法訓練營第一期 | 在排序陣列中查詢元素的第乙個和最後乙個位置_algomooc演算法慕課網public
class
solution ;6}
78int firstposition =findfirstposition(nums, target);
9if (firstposition == -1) ;11}
1213
int lastposition =findlastposition(nums, target);
14return
newint;15
}1617private
int findfirstposition(int nums, int
target) else30}
3132
if (nums[left] ==target)
35return -1;36}
3738
private
int findlastposition(int nums, int
target) else 50
}51return
left;52}
53 }
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...