算法设计周记(九)--二分查找
2017-11-06 20:13
375 查看
问题导入
找出给定数组中局部峰值的角标,若有多个则任意返回一个即可。
一般求解
顺序遍历数组的每一个元素,找到某一个峰值立刻返回,是最容易想到的做法。class Solution { public: int findPeakElement(vector<int>& nums) { int rtn; if (nums.size() == 1) return 0; else if (nums[0] > nums[1]) return 0; for (rtn = 1; rtn < nums.size(); rtn++) { if (nums[rtn] > nums[rtn-1] && nums[rtn] > nums[rtn+1]) return rtn; } return rtn-1; } };这种解法比较暴力,时间复杂度为O(N),代码并不是非常优雅。
检索优化
此题不需要额外的空间消耗,要想取得突破只能从查询的方式上改良。这样首先想到的自然是二分查找,该方法的时间复杂度仅为O(logN),性能得到了一定的优化。以下是二分查找的迭代实现:class Solution { public: int findPeakElement(const vector<int> &num) { int low = 0; int high = num.size()-1; while(low < high) { int mid1 = (low+high)/2; int mid2 = mid1+1; if(num[mid1] < num[mid2]) low = mid2; else high = mid1; } return low; } };
相关文章推荐
- 紫书第八章-----高效算法设计(二分查找、尺取法/滑动窗口法、三分查找)
- 数据结构和算法设计专题之---二分查找(Java版)
- 【算法学习笔记】22.算法设计初步 二分查找 上下界判断
- 【算法学习笔记】22.算法设计初步 二分查找 上下界判断
- 高效算法设计(二分查找,范围统计)
- 集训第四周(高效算法设计)C题 (二分查找优化题)
- 算法设计周记(七)--查找
- 高效算法设计(二分查找,范围统计)
- 数据结构和算法设计专题之---二分查找(Java版)
- 集训第四周(高效算法设计)B题 (二分查找优化题)
- 紫书_第八章_高效算法设计_8.2.3——二分查找
- 数据结构和算法设计专题之---二分查找(Java版)
- 数据结构和算法设计专题之---二分查找(Java版)
- 集训第四周(高效算法设计)N题 (二分查找优化题)
- 基础算法学习(01)-二分查找
- 算法入门---java语言实现的二分查找小结
- 二分查找算法
- 算法回顾(三) 二分查找
- 【数据结构与算法】二分查找
- 算法 【二分查找】