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

2021-10-01 13:18:37 字數 1308 閱讀 8192

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

你的演算法時間複雜度必須是 o(log n) 級別。

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

示例 1:

輸入: nums = [5,7,7,8,8,10], target = 8

輸出: [3,4]

示例 2:

輸入: nums = [5,7,7,8,8,10], target = 6

輸出: [-1,-1]

class solution {

public:

int left(vector& nums,int target)

int l = 0;

int r = nums.size()-1;

while(l <= r)

int mid = (l + r)/2;

if(target == nums[mid])

if(mid == 0 || target > nums[mid - 1])

return mid;

r = mid - 1;

else if(nums[mid] < target)

l = mid + 1;

else if(nums[mid] > target)

r = mid - 1;

return -1;

int right(vector& nums,int target)

int l = 0;

int r = nums.size()-1;

while(l <= r)

int mid = (l + r)/2;

if(target == nums[mid])

if(mid == nums.size() - 1 || target < nums[mid + 1])

return mid;

l = mid + 1;

else if(nums[mid] < target)

l = mid + 1;

else if(nums[mid] > target)

r = mid - 1;

return -1;

vectorsearchrange(vector& nums, int target) {

int l = left(nums,target);

int r = right(nums,target);

vectorvec;

vec.push_back(l);

vec.push_back(r);

return vec;

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...