33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
2017-10-21 10:44
666 查看
题目:
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e.,0 1 2 4 5 6 7might 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.
这道题目我认为不是很严密,因为他没有要求时间限制,那么只要顺序遍历不管这个数组的顺序如何都不会影响结果,只不过时间复杂度比较高,因为做习惯了时间复杂度有要求的,一开始就没有尝试这种,后来好奇试了一下居然也AC了==。。。但是还是要从每一道题目做出一点有意义有趣的事的~一般来说,对应有序序列的搜索,二分法是效率比较高的搜索方法。但是这道题目因为经过了一次轴旋转,所以并不是全部都满足有序序列。
参考别人的思路:点击打开链接
这种思路可以让二分法适用于这种非有序序列:首先判断是一个序列是有序序列:如果是有序序列,那么nums[left]<nums[right]。将初始序列一分为二,必然有一半是有序的,最开始的时候left指向index=0,right指向index=-1(最后一个元素),每个循环中都找有序的那一半,将target和那一半的边界进行比较就可以得到是否在那个序列中了。每次都在有序序列中进行判断,就可以尽可能的用到二分法的效果。
public class Solution { public int search(int[] nums, int target) { int min = 0, max = nums.length - 1, mid = 0; while(min <= max){ mid = (min + max) / 2; if(nums[mid] == target){ return mid; } // 如果左半部分是有序的 注意这里的等号 if(nums[min] <= nums[mid]){ if(nums[min] <= target && target < nums[mid]){//注意这里的等号 max = mid - 1; } else { min = mid + 1; } // 如果右半部份是有序的 } else { if(nums[mid] < target && target <= nums[max]){ min = mid + 1; } else { max = mid - 1; } } } // 不满足min <= max条件时,返回-1 return -1; } }
相关文章推荐
- leetcode题解-33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
- LeetCode 33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array I (33) && II (81) 解题思路
- !leetcode[33&81]:Search in Rotated Sorted Array[I & II]
- 33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
- [LeetCode]81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array I II
- 81. Search in Rotated Sorted Array II
- leecode 解题总结:81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- LeetCode 33,81. Search in Rotated Sorted Array i, ii
- leetcode 81 : Search in Rotated Sorted Array II
- leetcode 81: Search in Rotated Sorted Array II
- LeetCode | 81. Search in Rotated Sorted Array II
- LeetCode81——Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- LeetCode 81 Search in Rotated Sorted Array II
- LeetCode-81-Search in Rotated Sorted Array II 水题
- 81. Search in Rotated Sorted Array II
- [leetcode] 81. Search in Rotated Sorted Array II 解题报告