二分法(并非要排好序才做二分)
2015-08-26 09:42
225 查看
题目:找出数组的局部最小。
内容:定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果
arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部
最小;如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小。
给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任
意一个局部最小出现的位置即可。
思路:一般解法为遍历整个数组,找出最小值,时间复杂度为O(n)。其实这并不是最优解,
可先定义两个边界为arr[0],arr[N-1],判断是否为局部最小,若是局部最小则返回;若不是,
则在中间位置判断该值是否为局部最小,若不是,则根据情况重新设置边界。
总结:二分法并非一定要排好序的数组,而是确定在某个范围内一定有解或一定无解,以此缩小范围,节省时间。
内容:定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果
arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部
最小;如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小。
给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任
意一个局部最小出现的位置即可。
思路:一般解法为遍历整个数组,找出最小值,时间复杂度为O(n)。其实这并不是最优解,
可先定义两个边界为arr[0],arr[N-1],判断是否为局部最小,若是局部最小则返回;若不是,
则在中间位置判断该值是否为局部最小,若不是,则根据情况重新设置边界。
总结:二分法并非一定要排好序的数组,而是确定在某个范围内一定有解或一定无解,以此缩小范围,节省时间。
相关文章推荐
- zeroMQ 4 java
- CALayer 一些重要属性
- 【springmvc Request】 springmvc请求接收参数的几种方法
- 适配器模式
- 微信公众平台开发Token验证失败(有时URL超时)--解决方案
- 根据参数不同,展示不同button 传参方式为url地址?status=参数;
- 打包带JNI的APK,提示“系統找不到指定的路径”
- Lync 2013 站点池之间迁移中央管理存储(CMS)[有视频]
- C语言中输入输出格式控制
- mysql主从数据库配置详解
- Adb connection Error:远程主机强迫关闭了一个现有的连接
- 【Git分布式版本控制系统】Git安装与配置
- 利用php给图片添加文字水印--面向对象与面向过程俩种方法的实现
- Console显示:Conversion to Dalvik format failed with error 1 ;your project contains errors) please fix
- Java里的按值传递与引用传递
- SAP HANA会代替BW吗?
- Collections.sort的两种用法
- poj-2002
- CGContextAddArcToPoint和CGContextAddArc
- leetcode:Basic Calculator II