LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
来源:互联网 发布:powershell 远程linux 编辑:程序博客网 时间:2024/05/18 00:29
Search in Rotated Sorted Array
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.
我突然想用英文解说下,展示一下我英文解说这么专业主题的功力O(∩_∩)O~,都搞双语的话好像又太费时间了。
This is a classic interview question. It's solution is similar with normal binary search. The only difference is that we need to add more conditional sentences.
和普通的二分法差不多
The key points is when we divide the array into two half, we need to compare A[mid] with one of the end element of the array, so that we can know which half of the array is sorted, and which half is rotated, and divided them again subsequently.
关键是会增加条件判断
The difference I do here is that I add one normal binary search here as a helper function. Actually you don't need the binary search function, just one function will be alright. But that's fun to add them together to check the difference between them.
增加普通的binary search对比一下
class Solution {public:int search(int A[], int n, int target) {return unordBiSearch(A, 0, n-1, target);}int unordBiSearch(int A[], int low, int up, int tar){if (low > up) return -1;int mid = (low+up)>>1;if (A[mid] == tar)return mid;if (A[mid]>A[up]){if (A[low] <= tar && A[mid] > tar)return biSearch(A, low, mid-1, tar);else return unordBiSearch(A, mid+1, up, tar);}if (A[mid]<A[up]){if (A[mid] < tar && A[up] >= tar)return biSearch(A, mid+1, up, tar);else return unordBiSearch(A, low, mid-1, tar);}return -1;}int biSearch(int A[], int low, int up, int key){if(low>up) return -1; int mid = (low+up)>>1; if (key < A[mid]) return biSearch(A, low, mid-1, key); else if (A[mid] < key) return biSearch(A, mid+1, up, key); return mid; }};
//2014-1-26 updateint search(int A[], int n, int target) {return biSearch(A, 0, n-1, target);}int biSearch(int A[], int low, int up, int tar){if (low > up) return -1;int mid = low + ((up-low)>>1);if (tar == A[mid]) return mid;if (A[low] <= A[mid]){//容易错漏了A[low]<=tar的条件,容易遗漏等号if (A[low] <= tar && tar < A[mid]) return biSearch(A, low, mid-1, tar);else return biSearch(A, mid+1, up, tar);}else{//容易错漏if (A[mid] < tar && tar <= A[up]) return biSearch(A, mid+1, up, tar);else return biSearch(A, low, mid-1, tar);}return -1;}
- LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
- LeetCode | Search in Rotated Sorted Array(在旋转数组中查找)
- LeetCode @ Search in Rotated Sorted Array 旋转数组查找
- Search in Rotated Sorted Array 在旋转的数组中查找元素
- Search in Rotated Sorted Array-旋转数组的查找
- LeetCode------33. Search in Rotated Sorted Array(旋转数组中查找)
- 数组-Search in Rotated Sorted Array(在一个旋转的数组中查找想要的值的指针)
- Leetcode--Search in Rotated Sorted Array(旋转数组的查找)
- 【LeetCode刷题】旋转数组的查找 Search in Rotated Sorted Array
- leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法
- LeetCode 33 Search in Rotated Sorted Array(在旋转排序数组中搜索)(*)
- Search in Rotated Sorted Array II 旋转的数组中查找,有重复元素
- 【LeetCode】Search in Rotated Sorted Array旋转数组问题总结
- Search in Rotated Sorted Array 旋转数组里查找数 @LeetCode
- leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找
- LeetCode @ Search in Rotated Sorted ArrayII 旋转数组查找II
- 字符串算法——旋转数组中查找目标值(Search in Rotated Sorted Array)
- 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】
- Linux C编程笔记
- 固定资产新增接口
- Javascript创建对象的基本模式
- WERTYU
- 如何伪装zip文件
- LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
- 静态构造函数
- UNIX下C语言的图形编程-curses.h函数库
- c# list排序的三种实现方式
- 记录
- 设计模式学习笔记——面向对象设计原则
- qsort.c源代码分析
- ios开发(十): 全局变量的定义和使用
- C++虚函数