#include <iostream>
#include <vector>
#include <cmath>
bool isArraySortedAndValidGap(const std::vector<int>& vec) {
if (vec.size() < 2) return true;
int size = vec.size();
// Check ascending order
bool isAscending = true;
for (size_t i = 1; i < size; ++i) {
if (vec[i] < vec[i-1] || std::abs(vec[i] - vec[i-1]) < 1 || std::abs(vec[i] - vec[i-1]) > 3) {
isAscending = false;
break;
}
}
// Check descending order
bool isDescending = true;
if (!isAscending) {
for (size_t i = 1; i < size; ++i) {
if (vec[i] > vec[i-1] || std::abs(vec[i] - vec[i-1]) < 1 || std::abs(vec[i] - vec[i-1]) > 3) {
isDescending = false;
break;
}
}
}
return isAscending || isDescending;
}
int main() {
std::vector<int> vec1 = {1, 2, 3, 5, 8, 11, 14, 15};
if (isArraySortedAndValidGap(vec1)) {
std::cout << "vector is sorted and valid gaps" << std::endl;
} else {
std::cout << "vector is not sorted or gaps are invalid" << std::endl;
}
std::vector<int> vec2 = {15, 14, 11, 8, 5, 3, 2, 1};
if (isArraySortedAndValidGap(vec2)) {
std::cout << "vector is sorted and valid gaps" << std::endl;
} else {
std::cout << "vector is not sorted or gaps are invalid" << std::endl;
}
}
/*
run:
vector is sorted and valid gaps
vector is sorted and valid gaps
*/