递归
class Solution {
public:
/**
* @param A an integer array sorted in ascending order
* @param target an integer
* @return an integer
*/
int findPosition(vector<int>& A, int target) {
// Write your code here
int high = A.size();
if(high == 0)
return -1;
int low = 0;
return find(A, target, low, high);
}
int find(vector<int>& A, int target, int low, int high)
{
if(low > high)
return -1;
if(A[(low+high)/2] > target)
{
high = (low+high)/2;
return find(A, target, low, high-1);
}
else if(A[(low+high)/2] < target)
{
low = (low+high)/2;
return find(A, target, low+1, high);
}
else
{
return (low+high)/2;
}
}
};
非递归
class Solution {
public:
/**
* @param A an integer array sorted in ascending order
* @param target an integer
* @return an integer
*/
int findPosition(vector<int>& A, int target) {
// Write your code here
int high = A.size();
if(high == 0)
return -1;
int low = 0;
int mid = (high+low)/2;
while(high > low && A[mid] != target)
{
if(A[mid] < target)
{
low = mid + 1;
}
else if(A[mid] > target)
{
high = mid -1;
}
mid = (high+low)/2;
}
if(A[mid] == target)
return mid;
else
return -1;
}
};