34. Search for a Range
来源:互联网 发布:网络四十大禁书 编辑:程序博客网 时间:2024/05/21 15:39
问题描述
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),如果未在数组中找到目标值,返回[-1, -1]。那么我们可以先用二分法找到所要找的target值,然后在这个值的位置向左和向右找和它相等的值即可。
代码展示
#include <iostream>#include <stdlib.h>#include <string>#include <vector>using namespace std;class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int n=nums.size(); int left = 0; int right = n - 1; vector<int> result; result.push_back(-1); result.push_back(-1); while(left <= right) { int mid = (left + right) / 2; //用二分法找到符合要求的值 if(nums[mid] > target){ right = mid - 1; } else if(nums[mid] < target){ left = mid + 1; } else{ //找到了符合要求的值就从这个位置向左向右找其他和该值相等的值,几率它们的位置 result[0] = mid; result[1] = mid; int j = mid - 1; while(j >= 0 && nums[j] == target){ result[0] = j; j--; } j = mid + 1; while(j < n && nums[j] == target){ result[1] = j; j++; } break; } } return result; }};int main(){ int n; vector<int> nums; cout<<"请输入向量长度:"; cin>>n; int num[n]; for(int i = 0;i<n;i++){ cin>>num[i]; nums.push_back(num[i]); } cout<<"请输入target: "; int target; cin>>target; Solution solution; vector<int> result=solution.searchRange(nums, target); for(int i=0;i<result.size();i++){ cout<<result[i]<<" "; } cout<<endl;}
运行结果展示
阅读全文
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
- 浅谈对梯度下降的理解
- Struts2入门案例
- oracle表的管理简单增删改查回滚
- C语言程序设计:现代方法5
- 1002. 写出这个数 (20)
- 34. Search for a Range
- Scanner类中的next()和nextLine()方法
- 史上最详细安装JZMQ(jdk1.6下)
- Struts2 入门(概念)电子书01
- 全栈工程师到底有什么用
- win7中,关于sass预处理写中文注释报错
- 详解变量声明加 var 和不加 var 的区别
- CCF认证java模拟试题(附加答案)
- try/catch 语句块