【Leetcode】之Search in Rotated Sorted Array
2015-12-02 10:58
288 查看
一.问题描述
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.
二.我的解题思路
拿到本题,首先需要做的就是理解Rotated Sorted Array的含义。虽然并不知道题目所给例子中的rotate怎么来的,但是按照题意,应该只有单调递增和先递增,然后突然下降再上升这样两种趋势。明白了rotate之后,接下来就是要求解target的位置。如果数组是一般的单调递增数组,很自然的想到利用二分法。对于rotate的数组,仍然还是用二分法,不过在边界条件的判断上需要特别注意。测试通过的程序如下:
class Solution { public: int search(vector<int>& nums, int target) { int len = nums.size();int flag;int part=0; int left=0;int right=len-1; int mid=(left+right)/2; if(nums[0]>nums[len-1]) flag=0; //旋转过得 else flag=1; //未旋转过得 if(flag==0){ while(nums[mid]!=target) { if(target>=nums[0]) part=1; else part=0; if(nums[mid]>target){ if(nums[mid]>nums[0]&&part==1) right=mid; if(nums[mid]>nums[0]&&part==0) left=mid; if(nums[mid]<nums[0]) right=mid; } if(nums[mid]<target){ if(nums[mid]>nums[0]) left=mid; if(nums[mid]<nums[0]&&part==0) left=mid; if(nums[mid]<nums[0]&&part==1) right=mid; } mid=(left+right)/2; if(right-left==1){ if(nums[left]==target) return left; if(nums[right]==target) return right; return -1; } if(left==right) break; } if(nums[mid]!=target) return -1; else return mid; } if(flag==1){ while(nums[mid]!=target) { if(nums[mid]>target) right=mid; if(nums[mid]<target) left=mid; mid=(left+right)/2; if(right-left==1){ if(nums[left]==target) return left; if(nums[right]==target) return right; return -1; } if(left==right) break; } if(nums[mid]!=target) return -1; else return mid; } } };
相关文章推荐
- SQL——DDL DML DCL
- android 不显示函数注解怎么办?
- Mysql学习笔记六,视图
- Liunx 常用命令
- Jquery 语法
- 2015最流行的Android组件、工具、框架大全
- Java集合练习:斗地主游戏
- 包体可压缩80%!爱加密手游压缩和云更新简直颠覆!
- JS中如何实现sleep(休眠)的功能?
- CSS垂直与水平居中
- 分布式存储系统 之 数据备份
- 文章标题
- Unix Network Programming(7)---值-结果参数
- 北上广不相信眼泪
- c 内存对其
- jdbc 中preparedStatment 的使用
- tty
- IOS 获取当前版本号监测版本更新
- Codeforces Round #280 (Div. 2)C. Vanya and Exams(贪心)
- 树莓派配置无线网卡