博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode OJ:Search in Rotated Sorted Array(翻转排序数组的查找)
阅读量:7235 次
发布时间:2019-06-29

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

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).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

相当于将数组的后面一部折叠到数组的前面去了,本质上也是二分法,这里其实也是有规律可循的:首先要得到转折点,也就是其左边右边都比其大的那一点。给一个start以及一个end,如果nums[mid] > nums[start],那么说明从start到mid也一定是递增的,很容的知道pivot一定在mid+1到end之间,那么递归的去查找就可以了。nums[mid] < nums[start]可以同样的去分析,代码如下所示:

1 class Solution { 2 public: 3     int search(vector
& nums, int target) { 4 int pivot = getPivot(nums, 0, nums.size() - 1); 5 int pos = bSearch(nums, 0, pivot - 1, target); 6 if(pos != -1) 7 return pos; 8 return bSearch(nums, pivot, nums.size() - 1, target); 9 }10 11 int getPivot(vector
&nums, int start, int end){12 if(start > end)13 return -1;14 int mid = start + (end - start)/2;15 if(nums[start] <= nums[mid]){16 int pos = getPivot(nums, mid + 1, end);17 if(pos == -1) return start;18 else19 if(nums[pos] < nums[start])20 return pos;21 else22 return start;23 }else{24 int pos = getPivot(nums, start, mid);25 if(pos == -1)26 return mid;27 if(nums[pos] < nums[end])28 return pos;29 else30 return mid;31 }32 }33 34 int bSearch(vector
&nums, int start, int end, int target){35 int mid;36 while(start <= end){37 mid = (start+end)/2;38 if(nums[mid] > target){39 end = mid - 1;40 }else if(nums[mid] < target){41 start = mid + 1;42 }else{43 return mid;44 }45 } 46 return -1; //返回-1,表明在这一部分没有找到,可以在下一部分查找47 }48 };

 

转载于:https://www.cnblogs.com/-wang-cheng/p/5106656.html

你可能感兴趣的文章
【Java学习笔记之十三】初探Java面向对象的过程及代码实现
查看>>
【POI xls Java map】使用POI处理xls 抽取出异常信息 --java1.8Group by ---map迭代 -- 设置单元格高度...
查看>>
Ubuntu 14.04 安装VMware 12
查看>>
Hbase多版本的读写(Shell&Java API版)
查看>>
判断单链表是否有环的两种方法
查看>>
网页上用js禁用鼠标右键
查看>>
【&#9733;】微信之于QQ的市场哲学
查看>>
抓取某一个网站整站的记录
查看>>
Android依赖管理与私服搭建
查看>>
常用正则表达式大全!(例如:匹配中文、匹配html)
查看>>
结合抓包工具深入分析slb、vpc网络配置ftp服务
查看>>
关于db link权限分配的苦旅(二)
查看>>
CentOS7下如何查看vsftpd服务的状态
查看>>
阿里云Redis华北5 (呼和浩特)开放售卖
查看>>
SAP后台配置中“公司”与“公司代码”概念的不同
查看>>
JSP application对象
查看>>
使用消息系统进行微服务间通讯时,如何保证数据一致性
查看>>
Java---俄罗斯方块小游戏
查看>>
spring boot 调试 - 热部署
查看>>
Python installation
查看>>