问题
在一个有重复元素的有序数组(从小到大)中,找到指定元素的索引(索引从0开始)。给定一个有重复元素的有序数组: int nums[], 一个int数值 target, 找不到则返回-1
思路
二分法
#include<iostream>
using namespace std;
int find_index(const int nums[], int begin, int end, int target)
{
if (target < nums[0] || target > nums[end])
return -1;
while (begin <= end)
{
int mid = (begin + end) / 2;
if (target == nums[mid])
{
while (nums[mid] == target)
mid--;
return (mid+1);
}
else if (target > nums[mid])
begin = mid + 1;
else
end = mid - 1;
}
return -1;
}
int main()
{
int nums[] = { 0,1,1,1,2,3,3,3,4,4,4,6 };
int target;
int len = sizeof(nums) / sizeof(int);
cin >> target;
int i = find_index(nums, 0, len-1, target);
cout << i << endl;
return 0;
}
别再用嘴编程了喂 -_-