leetcode_c++:Search for a Range(034)
2016-05-18 00:45
447 查看
题目
Given a sorted array of integers, 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].
算法_1
stl-使用lower_bound和upper_bound算法_2
直接二分查找修改复杂度
O(lgn)#include<iostream> #include<vector> #include <algorithm> using namespace std; class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { vector<int>::iterator lower=lower_bound(nums.begin(), nums.end(), target); //lower_bound返回第一个大于等于value值得位置 vector<int>::iterator upper=upper_bound(nums.begin(), nums.end(), target); //upper 是第一个大于value值得位置 vector<int> resultNo; resultNo.push_back(-1); resultNo.push_back(-1); vector<int> ret; ret.push_back(lower-nums.begin()); ret.push_back(upper-nums.begin()-1); if(*lower !=target){ return resultNo; }else{ return ret; } } };
#include<iostream> #include<vector> #include <algorithm> using namespace std; class Solution { public: vector<int> searchRange(vector<int>& nums, int target){ vector<int> ret; ret.push_back(-1); ret.push_back(-1); int left=0,right=nums.size()-1,mid; while(left<=right){ if(nums[left]==target && nums[right]==target){ ret[0]=left; ret[1]=right; break; } mid=left+(right-left)/2; if(nums[mid]<target){ left=mid+1; }else if(nums[mid]>target){ right=mid-1; }else{ if(nums[right]==target) ++left; else --right; } } return ret; } };
相关文章推荐
- 【C语言】C语言32个关键字简介和9种控制语句
- C++ STL实例(一)
- C++ STL-string实例
- 模拟图书管理系统(简单c语言DOS界面)
- C++11: Multi-Thread思考.
- C++ Variadic template(可变长度参数函数)
- 八种排序算法之-c实现
- c语言学习笔记9之switch语句
- C语言指针 和 学生宿舍管理系统
- C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用
- C语言中的静态变量和普通变量的区别
- C++面向对象实验(五)
- C语言的指针、链表的原理和各类操作
- 2016/5/17 初识C++
- leetcode_c++:Search in Rotated Sorted Array(033)
- C++中getline函数用法(修正调试ok)
- 拓扑序列 C++实现
- 2013蓝桥决赛C/C++B组
- C++ Primer 第五版 练习 3.21,3.24
- 内存角度探寻C++面向对象 之 继承、多态