博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3-1-局部最小值位置
阅读量:5749 次
发布时间:2019-06-18

本文共 1416 字,大约阅读时间需要 4 分钟。

题目描述:

  定义局部最小的概念。
  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中任意一个局部最小出现的位置即可。

1 /* 2     前面先判断特殊情况。 3     然后根据“二分”,判断中间mid是否满足要求。 4     若 len > 1,首先分别判断arr[0]和arr[len-1]是否为局部最小值,若是则返回位置。 5     若不是,则1~len-2区间必然有一个是局部最小值。 6     首先判断mid=(l+r)/2是否为局部最小,若是则返回位置, 7     若不是则要么前半部分中有局部最小,要么后半部分中有局部最小。 8 */ 9 #include 
10 #include
11 using namespace std;12 13 int getLessIndex(vector
arr) {14 int len = arr.size();15 if (len == 0)16 return -1;17 if (len == 1 || arr[0] < arr[1])18 return 0;19 if (arr[len-1] < arr[len-2])20 return len-1;21 int l = 1;22 int r = len-2;23 while(l < r){24 int mid = (r+l)/2;25 if (arr[mid] < arr[mid-1] && arr[mid] < arr[mid+1])26 return mid;27 else if (arr[mid] > arr[mid-1])28 r = mid-1;29 else30 l = mid+1;31 }32 return l;33 }34 35 int main(){36 vector
a;37 a.push_back(8);38 a.push_back(7);39 a.push_back(3);40 a.push_back(4);41 a.push_back(3);42 a.push_back(4);43 cout << getLessIndex(a) << endl;44 return 0;45 }

 

转载于:https://www.cnblogs.com/qianmacao/p/4884773.html

你可能感兴趣的文章
RDS for MySQL 数据库优化【Tech Insight演讲实录】
查看>>
uwsgi配置了解
查看>>
PostgreSQL relcache在长连接应用中的内存霸占"坑"
查看>>
Javah提示未找到 ..的类文件
查看>>
2013年工作中一些问题回顾和总结
查看>>
【SHELL 编程基础第一部分】第一个SHELL脚本HELLOSHELL及一些简单的SHELL基础书写与概念;...
查看>>
How to: Define a Conversion Operator [msdn]
查看>>
虚拟机09:添加永久磁盘
查看>>
心理学集锦
查看>>
RColorBrewer调色板控制包的使用
查看>>
Oracle 10g 到11g的数据迁移 导入导出 顺序步骤 expdp/impdp
查看>>
【转载】actor 模型的优缺点分析介绍
查看>>
For Each...Next
查看>>
APK程序反编译
查看>>
敏捷开发的一些思考--故事拆分(同发csdn)
查看>>
jquery图片时钟
查看>>
把插入的数据自动备份到另一个表中 ~ 语境:本地和服务器自动同步
查看>>
Innodb:如何计算异步/同步刷脏及checkpoint的临界范围
查看>>
如何把命令行下的执行结果保存(二)
查看>>
Lucene5学习之使用Ansj-seg分词器
查看>>