在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-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); } };