编程之美:二分查找
2016-06-17 15:37
239 查看
前三个问题不讲,已经解决过了
可以参见
http://blog.csdn.net/gao1440156051/article/details/51699085
http://blog.csdn.net/gao1440156051/article/details/51699983
现在写最后两个
1.最大的i使得arr[i]小于v,其实就是求等于v的下界的前一个元素。
2.最小的i使得arr[i]大于v,其实就是求等于v的上界的后一个元素。
#include <iostream> #include<vector> using namespace std; int indexOfMaxLess(vector<int>& nums, int target){ int len = nums.size(); if (len == 0) return -1; int left = 0, right = len - 1; while (left <= right){ int mid = left + (right - left) / 2; if (target <= nums[mid]) right = mid - 1; else left = mid + 1; } if (left > 0){ return left - 1; } return -1; } int indexOfMinBigger(vector<int>& nums, int target){ int len = nums.size(); if (len == 0) return -1; int left = 0, right = len - 1; while (left <= right){ int mid = left + (right - left) / 2; if (target >= nums[mid]) left = mid + 1; else right = mid - 1; } if (right < len - 1){ return right + 1; } return -1; } int main() { vector<int> nums = { 0, 0, 2,2, 3, 3 }; cout << indexOfMaxLess(nums, 2) << endl; cout << indexOfMinBigger(nums, 2) << endl; cout << "-------------------" << endl; cout << indexOfMaxLess(nums, 0) << endl; cout << indexOfMinBigger(nums, 0) << endl; cout << "-------------------" << endl; cout << indexOfMaxLess(nums, 3) << endl; cout << indexOfMinBigger(nums, 3) << endl; return 0; }
结果:
1 4 ------------------- -1 2 ------------------- 3 -1
相关文章推荐
- Python关键函数
- PHP变量常量语言结构大小写敏感与…
- PHP与Python对比
- VS2008与Keil 代码对齐设置等
- Additive Number
- Running Python CGI Scripts on IIS(Windows操作系统,在IIS上运行Python)
- Python多线程、异步+多进程爬虫实现代码
- 步骤一:下载jdk并安装和配置java环境变量
- Java的设计模式
- 设计模式之建造者模式(C++实现)
- JAVA常用的验证(手机号的验证)
- spring3.2 @Scheduled注解 定时任务
- java利用CountDownLatch来制定线程执行顺序
- Java WebService 简单实例
- python支持多线程的爬虫
- 深入解读Lua中迭代器与泛型for的使用
- 数组转list的小知识
- Spring4.X的restFul 使用Gson返回json配置
- 合并两个已排序的链表
- 零基础写python爬虫之使用Scrapy框架编写爬虫