二分法相关

153. Find Minimum in Rotated Sorted Array

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

You may assume no duplicate exists in the array. (Medium)

分析:

根据旋转排序数组性质,问题转化为find first element which is bigger than nums[nums.size() - 1];

代码:

 class Solution {
public:
int findMin(vector<int>& nums) {
int start = , end = nums.size() - ;
int target = nums[nums.size() - ];
while(start + < end){
int mid = start + (end - start) / ;
if(nums[mid] > target){
start = mid;
}
else{
end = mid;
}
}
if(nums[start] < target){
return nums[start];
}
return nums[end];
}
};

162. Find Peak Element

A peak element is an element that is greater than its neighbors.

Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.

The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

You may imagine that num[-1] = num[n] = -∞.

For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2. (Medium)

分析:

因为题目假设了num[-1] = num[n] = - 所以对于nums[mid]来讲,其与左右元素之间无非只有三种情况:

(1) nums[mid-1] < nums[mid] && nums[mid] > nums[mid+1] ,此时mid即为peak element;

(2) nums[mid-1] < nums[mid] && nums[mid] < nums[mid+1],此时删除数组左半部分仍然可保证有peak element, mid = start;

(3)nums[mid-1] > nums[mid] && nums[mid] > nums[mid+1], 此时删除数组左半部分仍然可保证有peak element,mid = end;

(4)在波谷位置,随意左右均可。

 class Solution {
public:
int findPeakElement(vector<int>& nums) {
int start = , end = nums.size() - ;
while(start + < end ){
int mid = start + (end - start) / ;
if(nums[mid - ] < nums[mid] && nums[mid] > nums[mid+]){
return mid;
}
else if(nums[mid - ] < nums[mid] && nums[mid] < nums[mid + ]){
start = mid;
}
else{
end = mid;
}
}
if(nums[start] > nums[end]){
return start;
}
return end;
}
};
 

最新文章

  1. 【leetcode】Add Two Numbers
  2. Android手机同步电脑端google chrome书签
  3. 基于 Node.js 平台,快速、开放、极简的 web 开发框架。
  4. sklearn
  5. bzoj4177: Mike的农场
  6. Visual Studio创建跨平台移动应用_02.Cordova Extension
  7. Apache Tomcat部署java web项目
  8. bzoj2560 串珠子
  9. html查看器android
  10. redis hash结构 遍历某一个key下所有的(field,values)的方法
  11. java每日一总结
  12. ubuntu16.04升级Python3.5到Python3.7
  13. 17/11/24 05:08:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  14. C语言中的模运算-hdu6124(打表,找规律)
  15. Eclipse使用总结(不定时更新)
  16. 数据库入门理论知识介绍以及编译安装MySql
  17. LeetCode 700 Search in a Binary Search Tree 解题报告
  18. &lt;!-- str.startsWith(&#39;胡&#39;) 检查一个 字符串中是否有某字符 返回true false --&gt;&amp; vh 属性
  19. RabbitMQ入门:发布/订阅(Publish/Subscribe)
  20. 以About Us为范例在Zen cart中增加页面

热门文章

  1. 2018-8-14-Resharper-如何把类里的类移动到其他文件
  2. T2483 电梯(模拟题)
  3. Laravel 日志权限问题
  4. Dom直接选择器
  5. js的几种继承方式
  6. angular4 自定义表单验证Validator
  7. springmvc报404错误No mapping found for HTTP request with URI [/mavenSpringmvc/requesttest] in DispatcherServlet with name &#39;spring&#39;
  8. JetBrains PyCharm 2017.2 字体放大缩小 功能
  9. hihocoder1317 :搜索四&#183;跳舞链
  10. sklearn之特征提取(文本特征)