当前位置: 首页 > news >正文

中国风电商网站建设医院网站建设官网

中国风电商网站建设,医院网站建设官网,商标注册代理,网站开发确认书题目:33. 搜索旋转排序数组 思路:看到时间复杂度要求是O(log N)很容易想到二分查找,普通的二分查找我们已经掌握,本题中的数组可以看作由两个分别升序的数组拼成,在完全升序的部分中进行二分查找是容易的,…

题目:33. 搜索旋转排序数组

思路:看到时间复杂度要求是O(log N)很容易想到二分查找,普通的二分查找我们已经掌握,本题中的数组可以看作由两个分别升序的数组拼成,在完全升序的部分中进行二分查找是容易的,因此我们每次找到mid后,判断mid左侧为完全升序还是右侧为完全升序,比如,若mid左侧为完全升序,此时如果target的范围在这当中(即nums[i]-nums[mid]中),那么就去左边寻找,否则都去右边。

因此,主要思路为以下几部分:

1、判断哪一侧是完全升序的。nums[l]<nums[mid]则左侧完全升序、否则是右侧。

2、若左侧有序且target在这个范围中,就去左边寻找,否则去右边。

3、若右侧有序且target在这个范围中,就去右边寻找,否则去左边。

4、若找不到则返回-1.

代码:

class Solution {
public:int search(vector<int>& nums, int target) {int len=nums.size();int l=0,r=len-1;while(l<=r){int mid = (l+r)/2;if(target==nums[mid]) return mid;if(nums[l]<=nums[mid]){if(target>=nums[l]&&target<nums[mid])  r=mid-1;else l=mid+1;}else if(target>nums[mid]&&target<=nums[r]) l=1+mid;else r=mid-1; }return -1;}
};

补充:

在二分法中,左右指针的移动和循环条件的细微改变都会引起结果的不同。比如循环条件是while(l<r) 还是 while(l<=r),指针移动方式是l=mid,还是l=mid+1。我没有深入研究原理,只是观察并且猜测while(l<=r)与l=mid+1搭配使用是其中一种正确的方式,也许可以死板地记忆以下。

http://www.yayakq.cn/news/193737/

相关文章:

  • 学校网站建设工作内容seo销售
  • 国外小型网站网站网页设计代码
  • wordpress 在线编辑甘肃网站seo技术厂家
  • 山东建设执业资格注册中心网站如何发布网站教程
  • 编程自学网站seo优化运营
  • 公司网站想自己做网站开发外包哪家好
  • 北京顺义做网站常用的网站建设技术包括
  • 中国网站开发.netcms网站管理系统
  • aspnet网站开发教程数据库福建银瑞建设工程有限公司网站
  • 网站标签系统新品发布会海报
  • 做logo的ppt模板下载网站网页制作基础教程书籍
  • 河南省和建设厅网站怎么做网页截图
  • 湖州市建设中心网站吴江高端网站建设
  • 电子商务网站建设开发文档网站好友邀请链接生成 php
  • 提供营销型网站设计1企业网站案例
  • 手机怎样使用域名访问网站网站网站建设企业
  • 金华网站制作建设wordpress主题 微博
  • 品牌网站建设解决wordpress登录地址修改
  • 广州专业网站设计wordpress中英文插件
  • 域名备案查询站长工具网络运维工程师工资
  • 如何做企业网站小程序网站建设建设公司有哪些
  • win2008做网站贵阳学网站建设
  • 网站备案提交管局建个人网站做导购怎么备案
  • 广州公司网站提供网站 ftp信息
  • 网站自建系统百度指数是搜索量吗
  • 贵阳百度公司建网站电话做思维导图的资源网站
  • 上海企业网站设计制作山东房和城乡建设厅网站首页
  • 山楂树建站公司兰州最新通知
  • 做网站的边框素材网站如何做优化推广
  • 建一个网站需要多少钱网站怎么做的优化企业门户网站