算法课第十四周作业 | Search for a Range
来源:互联网 发布:可视化常用数据集 编辑:程序博客网 时间:2024/06/08 07:07
写在前面:
选取题目34,采用二分法实现。
题意解读:
给定一个升序整数数组和一个目标整数target。
求目标整数在这个数组中的起始位置和结束位置。
如果找不到返回[-1,-1]
要求算法复杂度是log(n)
解题思路:
由于数组是升序数组,可以拆解分两步进行,先找到起始位置,再找到结束位置。
通过二分法先找到起始位置begin,方法是找到最接近并且小于target整数来确定。
即每次取中间位置值mid与target比较,小于target则将begin设置为mid,大于等于则将end设置为mid。
第二步找结束位置同样是二分法,方法是找到最接近并且大于target整数位置来确定。
即每次取begin和end的中间位置值于target比较,等于target则将begin设置为mid,大于则将end设置为mid。
需要注意的是,二分法当begin = end-1时满足循环条件会进入死循环,这时需要加条件判断来使之跳出。
代码:
#include <iostream>#include <vector> using namespace std;class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { if(nums.size() == 0) { return vector<int>(2, -1); } vector<int> result; int begin = 0; int end = nums.size()-1; int mid; while(begin < end) { mid = (begin + end) / 2; if(target > nums[mid]) { begin = mid + 1; } else { end = mid; } } if(nums[begin] != target) { return vector<int>(2, -1); } result.push_back(begin); end = nums.size()-1; while(begin < end) { if(begin == end - 1) { if(target == nums[end]) { break; } else { end = end - 1; break; } } mid = (begin + end) / 2; if(target == nums[mid]) { begin = mid; } else { end = mid - 1; } } result.push_back(end); return result; }};int main(){int a[6] = {8, 8, 8, 8, 8, 9};vector<int> test(a, a+6);Solution ss;vector<int> result = ss.searchRange(test, 9);cout << result[0] << "," << result[1] << endl;return 0;}
运行截图:
阅读全文
0 0
- 算法课第十四周作业 | Search for a Range
- java算法之Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range !!!
- Search for a Range
- Search for a Range
- Search For A Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- SearchView&WebView的简单用法
- mysql学习笔记
- 32.翻转单词顺序列
- caffe源码解析 — caffe.proto
- ubuntu 16.04LTS 下更新时提示/boot“磁盘空间不足”
- 算法课第十四周作业 | Search for a Range
- 对移动开发中蓝牙温湿度源码的部分分析
- java语言基础(53)——String 字面值对象和构造方法创建对象的区别
- ssh远程登录
- c++指针的指针和指针的引用
- cef BranchesAndBuilding
- C#桌面程序监听显示器更改事件
- Linux静态IP配置
- linux(五)关闭和重启命令