(Java)LeetCode-33. Search in Rotated Sorted Array
来源:互联网 发布:mac dock栏恢复默认 编辑:程序博客网 时间:2024/05/16 15:33
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.
这道题,就是一个递增的数组被拆成两半,前后调换了顺序。让你从中找一个数。这题是Hard难度。
一个有趣的尝试,就是从前到后遍历数组,居然也可以Accept,时间也很短,1ms,不过我估计这不是出题人的意图。。
这次肯定会用到二分查找,递归。
我是这样想的:
找到数组中间的数nums[mid],如果比nums[left]大,则说明前一半数组还处在第一段里。这个时候如果nums[left] <= target <= nums[mid] 则用二分法查找前半部分即可
如果target不再这个范围内,则可能在后半部分中,后半部分和整个数组的情况是一样的,是被分成两半的递增数组,递归调用此方法即可。
如果数组中间的数nums[mid]比nums[left]小,则说明后一半数组已经处在第二段里,是个递增数组,这个时候如果nums[mid] <= target <= nums[right] 则用二分法查找后半部分即可,如果target不再这个范围内,则可能在前半部分中,前半部分和整个数组的情况是一样的,是被分成两半的递增数组,递归调用此方法即可。代码如下:
package datastru;public class Solution { public int search(int[] nums, int target) { return search(nums, target, 0, nums.length-1); }private int search(int[] nums, int target, int left, int right) {// TODO Auto-generated method stubif(left == right){if(nums[left] == target){return left;}else{return -1;}}int mid = (left + right)/2;if(nums[mid] >= nums[left]){if(nums[left] <= target && target <= nums[mid]){return binarySearch(nums,target,left,mid);}else{return search(nums,target,mid+1,right);}}else{if(nums[mid] <= target && target <= nums[right]){return binarySearch(nums,target,mid,right);}else{return search(nums,target,left,mid);}}}private int binarySearch(int[] nums, int target, int left, int right) {// TODO Auto-generated method stubif(left == right){if(nums[left] == target){return left;}else{return -1;}}int mid = (left + right)/2;if(target < nums[mid]){return binarySearch(nums,target,left,mid);}else if(target == nums[mid]){return mid;}else{return binarySearch(nums,target,mid+1,right);}}public static void main(String[] args){Solution sol = new Solution();int[] nums = {4,5,6,7,0,1,2};System.out.println(sol.search(nums, 3));}}
- [Leetcode] Search in Rotated Sorted Array (Java)
- [LeetCode][Java] Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array [java]
- Search in Rotated Sorted Array leetcode java
- [LeetCode]33.Search in Rotated Sorted Array
- LeetCode --- 33. Search in Rotated Sorted Array
- LeetCode 33.Search in Rotated Sorted Array
- [Leetcode] 33. Search in Rotated Sorted Array
- Leetcode-33.Search in Rotated Sorted Array.
- [leetcode] 33. Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array
- [LeetCode]33. Search in Rotated Sorted Array
- leetcode 33. Search in Rotated Sorted Array
- LeetCode *** 33. Search in Rotated Sorted Array
- LeetCode - 33. Search in Rotated Sorted Array
- LeetCode 33. Search in Rotated Sorted Array
- leetcode 33. Search in Rotated Sorted Array
- leetcode 33.Search in Rotated Sorted Array
- jquery知识点总结
- 基础算法系列总结:动态规划(解公司外包成本问题)
- c语言那些很少用到的东西
- Android中JNI的使用方法
- 百度之星 大搬家 递推
- (Java)LeetCode-33. Search in Rotated Sorted Array
- AVL平衡搜索树
- coderforces-701B--数学去重stl
- HTML的DOCTYPE的三种类型
- STL学习——STL中的序列式容器及适配器总结(vector、list、deque、stack、queue)
- 运煤车的最大路程
- Java中ArrayList和LinkedList区别
- linux中文乱码解决之道
- No matching bean of type [com.spw.service.UserService] found for dependency