Search in Rotated Sorted Array
来源:互联网 发布:网络优化大师.apk 编辑:程序博客网 时间:2024/06/03 18:12
原题:
Suppose an array sorted in ascending order 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.
即给定一个从小到大排好序的数组以某个元素为旋转点旋转之后形成的数组。这个旋转不是平时理解的旋转,像是根据某个点将数组分成两段后交换顺序。从这个数组里找到值为target的元素,给出索引,如果没有,返回-1。
思考过程:
一开始想到遍历整个数组是很简单的,o(n)。但既然排好序就应该用二叉搜索的思想。至少有递归思想。这个数组经过截取一定有一半是sorted array(排好序的数组)的。
解题思路:
用递归思想,判断target在左边一段还是右边一段:
判断左右哪段是sorted array,判断它是否在这个sorted array范围之内,如果不是,遍历另一段。
如果这段数组只剩两个元素,判断这两个元素是否和target相等,如果不想等,返回-1.
结果代码:
public int search(int[] nums, int target) { if (nums.length == 0)return -1; return searchInRotatedArray(nums,0,nums.length - 1,target); } public int searchInRotatedArray(int[] nums,int begin,int end,int target){ int midium = (begin + end) / 2; if (midium == begin) { if (nums[midium] == target) return midium; if (nums[end] == target) return end; else return -1; } if (nums[midium] > nums[begin]) { if (target <= nums[midium] && target >= nums[begin]) return searchInRotatedArray(nums, begin, midium, target); else return searchInRotatedArray(nums,midium,end,target); } if (nums[midium] < nums[end]) { if (target >= nums[midium] && target <= nums[end]) return searchInRotatedArray(nums, midium, end, target); else return searchInRotatedArray(nums, begin, midium, target); } return -1; }
阅读全文
0 0
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Linux 进程管理之四大名捕
- 防止重复提交
- C++类型范围和负数取模运算规则。
- [BZOJ]2751: [HAOI2012]容易题(easy) 暴力+快速幂
- 2017年扶贫日活动将在10月9日启动
- Search in Rotated Sorted Array
- 【C#】C#学习之方法
- 最大流 模板
- Mining Your Own Business 点双连通分量
- 案例一:集群推送消息
- vSAN架构细节-分布式RAID
- 解决Ubuntu16.04系统耳机无声音问题
- XML文档--Schema
- 处理视频流byte数据