#include <iostream>
using namespace std;
void printArray(int array[], int arrLen) {
for (int i = 0; i < arrLen; ++i) {
cout << array[i] << " ";
}
cout << endl;
}
int find_fist_value(int arr[], int len, int value) {
int low = 0;
int high = len - 1;
while (low <= high) {
int mid = low + ((high - low) >> 1);
if (arr[mid] > value) {
high = mid - 1;
} else if (arr[mid] < value) {
low = mid + 1;
} else {
if ((mid == 0) || (arr[mid - 1] != value)) {
return mid;
} else {
high = mid - 1;
}
}
}
return -1;
}
int find_last_value(int arr[], int len, int value) {
int low = 0;
int high = len - 1;
while (low <= high) {
int mid = low + ((high - low) >> 1);
if (arr[mid] > value) {
high = mid - 1;
} else if (arr[mid] < value) {
low = mid + 1;
} else {
if ((mid == len - 1) || (arr[mid + 1] != value)) {
return mid;
} else {
low = mid + 1;
}
}
}
return -1;
}
int find_the_fist_bigger_value(int arr[], int len, int value) {
int low = 0;
int high = len - 1;
while (low <= high) {
int mid = low + ((high - low) >> 1);
if (arr[mid] > value) {
if (mid == 0 || arr[mid - 1] <= value) {
return mid;
} else {
high = mid - 1;
}
} else {
low = mid + 1;
}
}
return -1;
}
int find_the_last_smaller_value(int arr[], int len, int value) {
int low = 0;
int high = len - 1;
while (low <= high) {
int mid = low + ((high - low) >> 1);
if (arr[mid] < value) {
if (mid == len - 1 || arr[mid + 1] >= value) {
return mid;
} else {
low = mid + 1;
}
} else {
high = mid - 1;
}
}
return -1;
}
int main() {
int array0[] = {1,2,2,2,3,5,6};
int arrayLen = sizeof(array0)/sizeof(int);
printArray(array0, arrayLen);
cout << "数组中第一个出现2的位置在:"<<find_fist_value(array0,arrayLen,2)<<endl;
cout << "数组最后一个出现2的位置在: "<< find_last_value(array0,arrayLen,2) << endl;
cout << "数组中第一个大于2的值的位置在:"<< find_the_fist_bigger_value(array0,arrayLen,2) << endl;
cout << "数组中最后一个小于2的值的位置在:"<< find_the_last_smaller_value(array0,arrayLen,2) << endl;
return 0;
}