博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode个人题解——#33 Search in Rotated Sorted Array
阅读量:5357 次
发布时间:2019-06-15

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

思路:每次取中间元素,一定有一半有序,另一半部分有序,有序的部分进行二分查找,部分有序的部分递归继续处理。

class Solution {public:    int pos = -1;    int middleSearch(int left, int right,vector
& nums, int target){
//二分查找 if(left > right || right > nums.size() - 1 || left < 0)return -1; if(nums[left] == target)return left; int mid = (left + right) / 2; if(nums[mid] == target)return mid; if(target>nums[mid]) return middleSearch(mid+1,right,nums,target); else return middleSearch(left,mid - 1,nums,target); } void mixSearch(int left, int right, vector
& nums, int target){
//混合处理 if(left > right || right > nums.size() - 1 || left < 0) return; if(nums[left] == target) { pos = left; return; } int ans; int middle = (left + right) / 2; if(nums[middle] > nums[right]) { ans = middleSearch(left,middle,nums,target); if(ans == -1) mixSearch(middle+1,right,nums,target); else{ pos = ans; return; } } else{ ans = middleSearch(middle,right,nums,target); if(ans == -1) mixSearch(left,middle - 1,nums,target); else{ pos = ans; return; } } } int search(vector
& nums, int target) { mixSearch(0,nums.size() - 1,nums,target); return pos; }};

写的冗余了点,附上简洁的代码:

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

 

转载于:https://www.cnblogs.com/txltxl22/p/10453093.html

你可能感兴趣的文章
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
selenium-窗口切换
查看>>
使用vue的v-model自定义 checkbox组件
查看>>
[工具] Sublime Text 使用指南
查看>>
Web服务器的原理
查看>>
常用的107条Javascript
查看>>