在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1
样例
给出数组 [1, 2, 2, 4, 5, 5]
.
- 对于 target =
2
, 返回 1 或者 2. - 对于 target =
5
, 返回 4 或者 5. - 对于 target =
6
, 返回 -1.
挑战
O(logn) 的时间
解题思路1:
循环实现。
class Solution {
public:
/*
* @param nums: An integer array sorted in ascending order
* @param target: An integer
* @return: An integer
*/
int findPosition(vector<int> &nums, int target)
{
// write your code here
if(nums.empty())
return -1;
int i = 0;
int j = nums.size()-1;
while(i<=j)
{
int mid = (i+j)/2;
if(nums[mid] == target)
return mid;
else if(nums[mid] < target)
i = mid + 1;
else
j = mid - 1;
}
return -1;
}
};
解题思路2:
递归实现。
class Solution {
public:
/*
* @param nums: An integer array sorted in ascending order
* @param target: An integer
* @return: An integer
*/
int findPosition(vector<int> &nums, int target)
{
// write your code here
if(nums.empty())
return -1;
int i = 0;
int j = nums.size()-1;
return findPosition(nums, target, i, j);
}
int findPosition(vector<int> &nums,int target, int begin, int end)
{
if(begin > end)
return -1;
int mid = (begin + end)/2;
if(nums[mid] == target)
return mid;
else if(nums[mid] < target)
return findPosition(nums,target,mid+1,end);
else
return findPosition(nums,target,begin,mid-1);
}
};