Leetcode 81. Search in Rotated Sorted Array II 旋转数组查询2 解题报告
2016-05-30 00:06
525 查看
1 解题思想
基本思想和之前的一样,但是因为允许重复,如果出现无法判断的情况(请看代码里 新增的区分 的注释),则需要缩减一个范围继续搜索具体的请看第一个问题:
Leetcode #33. Search in Rotated Sorted Array 旋转数组查询 解题报告
2 原题
Follow up for “Search in Rotated Sorted Array”:What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
Subscribe to see which companies asked this question
3 AC解
public class Solution { /** * 这道题和上一道的不同之处,在于这道题可以重复,因此在寻找旋转点的时候要记得区分=的情况 * 在最后二分查找的时候也是有一点点不同*/ public int findRotateIndex(int[] nums,int start,int end){ if(start==end) return start; int mid=(start+end)/2; //左边的顺序是正确的,那肯定在右边,注意这是没有重复的 if(nums[start]<nums[mid]){ return findRotateIndex(nums,mid,end); } else if(nums[start] == nums[mid]){ //***新增的区分 return findRotateIndex(nums,start+1,end); } else{ return findRotateIndex(nums,start,mid); } } public boolean bsearch(int[] nums,int start,int end,int target){ if(start>end){ return false; } int mid=(start+end)/2; if(target==nums[mid]) return true; if(target<nums[mid]){ return bsearch(nums,start,mid-1,target); } else{ return bsearch(nums,mid+1,end,target); } } public boolean search(int[] nums, int target) { int rotated= findRotateIndex(nums,0,nums.length); if(rotated==nums.length) rotated--; //根据第一个值,就能判断属于哪一份,然后二分查找 if(nums[0]<target) return bsearch(nums,0,rotated,target); if(nums[0]==target){ //***新增的区分 return bsearch(nums,0,rotated,target) || bsearch(nums,rotated,nums.length-1,target); } else return bsearch(nums,rotated,nums.length-1,target); } }
相关文章推荐
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 本人即将筹备败家日志,敬请期待!
- IE:使用搜索助手
- ie6 注释引起的问题
- 编写Ruby代码注释时需要注意的一些问题
- Ruby教程之注释、变量声明以及数组操作
- 代码中到底应不应当写注释?
- C++深度优先搜索的实现方法
- 基于文本的搜索
- php实现搜索一维数组元素并删除二维数组对应元素的方法
- 使用Sphinx对索引进行搜索
- C#实现为类和函数代码自动添加版权注释信息的方法
- asp 多关键词搜索的简单实现方法
- 不要小看注释掉的JS 引起的安全问题
- C#使用foreach语句搜索数组元素的方法
- WordPress中用于获取搜索表单的PHP函数使用解析
- JavaScript中数组的排序、乱序和搜索实现代码
- jquery ztree实现树的搜索功能
- C#注释的一些使用方法浅谈
- C#编程实现Excel文档中搜索文本内容的方法及思路