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.
文章来自:http://blog.csdn.net/linhuanmars/article/details/20525681
因为rotate的缘故,当我们切取一半的时候可能会出现误区,所以我们要做进一步的判断。具体来说,假设数组是A,每次左边缘为l,右边缘为r,还有中间位置是m。在每次迭代中,分三种情况:
(1)如果target==A[m],那么m就是我们要的结果,直接返回;
(2)如果A[m]<A[r],那么说明从m到r一定是有序的(没有受到rotate的影响),那么我们只需要判断target是不是在m到r之间,如果是则把左边缘移到m+1,否则就target在另一半,即把右边缘移到m-1。
(3)如果A[m]>=A[r],那么说明从l到m一定是有序的,同样只需要判断target是否在这个范围内,相应的移动边缘即可。
图片来自:http://fisherlei.blogspot.com/2013/01/leetcode-search-in-rotated-sorted-array.html
根据以上方法,每次我们都可以切掉一半的数据,所以算法的时间复杂度是O(logn),空间复杂度是O(1)。代码如下:
public int search(int[] A, int target) { int start = 0, end = A.length-1; while(start<=end) { int m = (start+end)/2; if(A[m] == target) { return m; } if(A[m] < A[end]) { if(target>A[m] && target<=A[end]) { start = m+1; } else { end = m-1; } } else { if(target>=A[start] && target<A[m]) { end = m-1; } else { start = m+1; } } } return -1; }
相关推荐
js js_leetcode题解之33-search-in-rotated-sorted-array.js
c语言入门 C语言_leetcode题解之33-search-in-rotated-sorted-array.c
javascript js_leetcode题解之81-search-in-rotated-sorted-array-ii.js
javascript js_leetcode题解之153-find-minimum-in-rotated-sorted-array.js
javascript js_leetcode题解之154-find-minimum-in-rotated-sorted-array-ii.js
python python_leetcode题解之081_Search_in_Rotated_Sorted_Array_II
c c语言_leetcode题解之0081_search_in_rotated_sorted_array_ii.zip
python python_leetcode题解之153_Find_Minimum_in_Rotated_Sorted_Array.py
python python_leetcode题解之154_Find_Minimum_in_Rotated_Sorted_Array_II.py
Search in Rotated Sorted Array(搜索旋转排序数组)#数组 2020/12/08 19. Remove Nth Node From End of List(删除链表的倒数第N个节点) 153. Find Minimum in Rotated Sorted Array(寻找旋转排序数组中的最小值...
- Search in Rotated Sorted Array II: 假设按照升序排序的数组在预先未知的某个点上进行了旋转,该问题要求在旋转后的数组中搜索特定元素。 这些知识点涵盖了数据结构和算法的核心概念,以及如何用Python语言实现...
find-minimum-in-rotated-sorted-array-0153 数组的乘积-除了-self-0238 从排序数组中删除重复项-0026 搜索旋转排序数组-0033 两个整数之和-0371 二和-0001 回溯 组合-和-0039 组合总和-ii-0040 电话号码的字母组合 ...
- **2.1.3 Search in Rotated Sorted Array** - 给定一个旋转后的有序数组,找到某个元素的位置。 - 实现思路:利用二分查找法,在处理中间值时考虑数组旋转的情况。 - **2.1.4 Search in Rotated Sorted Array ...
7. **二分查找**:在已排序的数组中查找特定元素或满足条件的元素,如"搜索旋转排序数组"(Search in Rotated Sorted Array)。 8. **位运算**:在数组操作中,位运算有时能提供高效的解决方案,如"无重复字符的...
颜色分类leetcode My Leetcode Problems Solutions Using javascript(ES6) 1 Two Sum 两数之和 5 Longest Palindromic Substring 最长回文子串 7 Reverse Integer 整数反转 9 Palindrome Number 回文数 11 Container...
- Search in Rotated Sorted Array II(在旋转排序数组中搜索II) - Find Minimum in Rotated Sorted Array(在旋转排序数组中寻找最小值) - Find Minimum in Rotated Sorted Array II(在旋转排序数组中寻找...
- **在旋转排序数组中搜索 II/Search in Rotated Sorted Array II**: 当数组中存在重复元素时,在被旋转过的排序数组中搜索给定数字。 #### 高级算法技巧 - **数学与位操作(Math and Bit Manipulation)**: 利用数学...
search-in-rotated-sorted-array ,比较中间值和边,而不是目标和边 40:combination-sum-ii:传递最后选择的索引 41:先缺失正,交换 42:只是提醒:块 - 垃圾箱 43:多字符串,i+j,i+j+1 44:通配符
leetcode lintcode差异 leetcode-python 九章算法基础班 二分 题目 地址 153. Find Minimum in Rotated Sorted Array 双指针 题目 Solution Tag LintCode 604. Window Sum LeetCode 283. Moves Zeroes Array、Two ...