Find Minimum in Rotated Sorted Array I

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.

思路:

当nums[left]<nums[right],说明数组没有旋转,是按升序排列的。可直接返回nums[left];

当nums[left]<nums[mid],说明left至mid这段是按升序排列的,可令left=mid+1;

当nums[left]>nums[mid],说明mid至right这段是按升序排列的,可令right=mid;

理清思路后,代码就变的异常简单了,下面的代码不是按照这个思路来的,这个思路是写II的时候才想出来的,用这个思路来写的话,非常好理解。

class Solution {
public:
int findMin(vector<int> &num) {
int len=num.size();
int Left,Right,Mid;
Left=;
Right=len-;
while(Left<=Right)
{
Mid=Left+(Right-Left)/;
if(num[len-]<num[Mid])
Left=Mid+;
else
Right=Mid-;
}
return num[Left];
}
};

Find Minimum in Rotated Sorted Array II

Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

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.

The array may contain duplicates.

这个思路和1差不多,关键是怎么处理重复的元素。

代码中continue那个语句是亮点。

class Solution {
public:
int findMin(vector<int>& nums) {
int len=nums.size();
int left=;
int right=len-;
int mid=;
while(left<right)
{
if(nums[left]==nums[right])
{
left++;
continue;
}
if(nums[left]<nums[right]) //这一步其实才是最大的亮点啊,解决了left=mid+1所带来的困惑,而且更加的高效
return nums[left];
mid=(left+right)/;
if(nums[mid]>=nums[left])
left=mid+;
else
right=mid;
}
return nums[left];
}
};

  

最新文章

  1. JSF标签的使用2
  2. 在win7下将CapsLock按键变成esc
  3. 作业七:团队项目——Alpha版本冲刺阶段-08
  4. 使用Struts 拦截namespace进行权限控制
  5. LeetCode Binary Tree Upside Down
  6. 使用Handler和Timer+Timertask实现简单的图片轮播
  7. VS2010与VAssistX
  8. Qt的十六进制的控件
  9. SpringMVC Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
  10. 【Android Developers Training】 13. 支持不同平台版本
  11. Developing Universal Windows Apps 开发UWA应用 问答
  12. python JoinableQueue在生产者消费者项目中的简单应用
  13. 关于Kafka日志留存策略的讨论
  14. 如何让微信里的html应用弹出“点击右上角分享到朋友圈”的图片
  15. 并行排序ShearSort ---[MPI , c++]
  16. Python 读取文件中unicode编码转成中文显示问题
  17. 案例:使用scan IP无法连接数据库
  18. VS2015编译OpenSSL
  19. Centos 安装编译codeblocks&amp;&amp;codelite
  20. Ansible自动化配置详解

热门文章

  1. bzoj2724: [Violet 6]蒲公英(离散化+分块)
  2. Mysql数据库的主从复制
  3. 一些实用的JQuery代码片段收集
  4. 怎样才能快速成为JavaScript高手
  5. angularJS入门小Demo【简单测试js代码的方法】
  6. Apache 403 错误解决方法-让别人可以访问你的服务器(转)
  7. 如何根据域名来得到对应的IP
  8. UVA 11040 Add bricks in the wall
  9. Maven -- 将引用的本地jar文件打进war包里
  10. Flask从入门到放弃1:路由app.route()