34. Search for a Range
来源:互联网 发布:500人企业网络搭建 编辑:程序博客网 时间:2024/05/17 07:00
Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm’s runtime complexity must be in the order of O(log n).
If the target is not found in the array, return[-1, -1]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
题目规定必须在O(logn)的时间复杂度完成这道题,最简单的方法显然是二分搜索。我的思路是,先用二分搜索找到一个目标的下标,然后以该下标为中心,分别向前向后遍历,从而求出范围。
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> ans; int index = binarySearch(0, nums.size() - 1, nums, target); if (index == -1) { ans.push_back(-1); ans.push_back(-1); return ans; } for (int i = index; i >= 0; i--) { if (nums[i] != target) { ans.push_back(i + 1); break; } } if (nums[0] == target) ans.push_back(0); for (int j = index; j < nums.size(); j++) { if (nums[j] != target) { ans.push_back(j - 1); break; } } if (nums[nums.size() - 1] == target) ans.push_back(nums.size() - 1); return ans; } int binarySearch(int begin, int end, vector<int> nums, int target) { if (end < begin || nums.empty()) return -1; int mid = begin + (end - begin) / 2; if (nums[mid] == target) return mid; if (target < nums[mid]) return binarySearch(begin, mid - 1, nums, target); if (target > nums[mid]) return binarySearch(mid + 1, end, nums, target); }};
阅读全文
0 0
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 岛屿周长
- openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
- 整数反转
- 动态导入资源
- WPS Excel表格怎么启用宏功能?
- 34. Search for a Range
- 第0届浙江工业校赛
- linux上weblogic新建domain
- java练习2-1
- 矩估计与最大似然估计
- pycharm环境配置opencv
- java练习2-2
- 过滤器和拦截器的本质区别
- 我的Java课程学习3——99乘法表