leetcode 34. Search for a Range
来源:互联网 发布:mac如何强制卸载软件 编辑:程序博客网 时间:2024/05/05 07:53
题目:
Given a sorted array of integers, find the starting and ending position of a given target value.
一个已经排序好的整型数组,给一个目标值(target)。
在这个数组中找到这个目标值的起始下标和结束下标。
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]
.
如果该数组中没有该target值,那么返回[-1,-1]
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
解答:
题目要求时间复杂度,为O(log n),而且给的数组为有序的。那么首先想到二分查找。
但是此时的二分查找,需要找到target不止一个的下标值。最左端的和最右端的下标。
那么进行两次target查找,第一次找最左端的,第二次找最右端的。
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> ret; ret.push_back(-1); ret.push_back(-1); //nums长度 int len=nums.size(); if(len==0) return ret; int low,high,mid; low=0; high=len-1; //通过两次查找,先在nums中找到target的最左边的下标;再找target的最右边的下标; //找左下标 while(low<=high) { mid=(low+high)/2; if(nums[mid]==target ) { if(ret[0]==-1 || ret[0]>mid) { ret[0]=mid; } high=mid-1; } if(nums[mid]<target) { low=mid+1; } if(nums[mid]>target) { high=mid-1; } } //找 最右 下标 low=0; high=len-1; while(low<=high) { mid=(low+high)/2; if(nums[mid]==target ) { if(ret[1]==-1 || ret[1]<mid) ret[1]=mid; low=mid+1; } if(nums[mid]<target) { low=mid+1; } if(nums[mid]>target) { high=mid-1; } } return ret; }};
0 0
- [LeetCode]34.Search for a Range
- LeetCode --- 34. Search for a Range
- LeetCode 34.Search for a Range
- [Leetcode] 34. Search for a Range
- [leetcode] 34.Search for a Range
- 【leetcode】34. Search for a Range
- [leetcode] 34. Search for a Range
- Leetcode 34. Search for a Range
- LeetCode 34. Search for a Range
- <LeetCode OJ> 34. Search for a Range
- 34. Search for a Range LeetCode
- [Leetcode]34.Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- LeetCode *** 34. Search for a Range
- LeetCode 34. Search for a Range
- 2-3确认(confirm 消息对话框)
- 锁屏简介
- sina面试题--用图形用户界面模拟聊天室
- 38、JavaScript的运动----分享到侧边栏
- 求两个长度相同的升序数组的中位数
- leetcode 34. Search for a Range
- java开发编译器:自底向上语法解析的基本原理
- java Exception in thread "main" java.lang.NoClassDefFoundError: (wrong name: ) 解决方案
- 剑指offer题解 替换空格
- Android 开发之 WebVIew 与 JS 交互
- 飞思卡尔 K20 CAN FIFO简单笔记
- RestEasy介绍
- HashSet其实就那么一回事儿之源码浅析
- (OK)(OK) NS3 - MANET - OLSR can not work in bridge NODE