LeetCode——Search for a Range
来源:互联网 发布:怎么在淘宝买ps4gta5 编辑:程序博客网 时间:2024/05/17 02:18
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 ofO(logn).
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]
.
这道题还是比较简单的,题意就是让我们去找已经排好序的数组的某一元素的上界和下界,如果没有找到这个元素,就返回[-1,-1]。
这里要注意的是我们只能用时间复杂度为O(log n)或者更少的算法解决本题。
其实O(log n)也是这题的一个提示,我们只需要对给定的数组进行最多一次的遍历就能解决这个问题。
代码如下:
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int len = nums.size(); int low = 0; int high = len-1; vector<int> result; while(low <= high) { int mid = (low+high)/2; if(nums[mid] == target) { int min = mid; while(min>=0 && nums[min]==nums[mid]) min--; int max = mid; while(max<=high && nums[max]==nums[mid]) max++; result.push_back(min+1); result.push_back(max-1); return result;}else if(nums[mid] > target) {high = mid-1;}else if(nums[mid] < target) {low = mid+1;}}result.push_back(-1);result.push_back(-1);return result; }};
起初先规定low为0,high为数组的大小减1。然后确定mid的值为两者相加除以2。用nums[mid]的值和目标值比较,如果相等就直接分别向下向上遍历找到下界和上界即可(直到nums[min]的值小于目标值/nums[max]的值大于目标值),如果nums[mid]的值比目标值大,就可以确定上界在当前的mid之下,可以把上界赋值为当前mid值再减1然后确定新的mid值然后继续寻找上界下界。如果nums[mid]的值比目标值小,就可以确定下界在当前的mid之上,就可以把下界赋值为当前mid值再加1然后继续去寻找。
在while循环外面进行把两个-1放到result向量中,意义就是如果找不到目标值的话就返回[-1 -1],也就是题目的要求。
最后返回声明的result向量就可以了。
阅读全文
0 0
- LeetCode —— Search for a Range
- LeetCode——Search for a Range
- LeetCode——Search for a Range
- leetcode——Search for a Range
- LeetCode——Search for a Range
- leetcode——34——Search for a Range
- leetcode 034 —— Search for a Range
- LeetCode题解——Search for a Range
- 【leetcode】Array——Search for a Range(34)
- Leetcode——34. Search for a Range
- LeetCode 之 Search for a Range — C++ 实现
- LeetCode: Search for a Range
- LeetCode Search for a Range
- [Leetcode] Search for a Range
- LeetCode : Search for a Range
- [LeetCode] Search for a Range
- [Leetcode] Search for a Range
- Leetcode Search for a Range
- 10.2PJ模拟赛游记
- easyui combo
- C++之堆排序(6)---《那些奇怪的算法》
- HPUACM大二周练第二周
- Codeforces-865C Gotta Go Fast(期望dp)
- LeetCode——Search for a Range
- 微信小程序-input
- 关于用户管理的练习
- MFC中MSComm事件不能触发的可能原因
- weblogic不能通过远程(宿机)访问控制台问题
- Educational Codeforces Round 29
- HTML 文本格式化 斜体 加重 粗体 大号
- JNI 学习笔记(一)-- JNI函数调用流程,JNI理解和基本数据类型
- 【图像融合】图像融合质量评价方法的研究