diff options
Solved all exercises from Sem06 sem06-solutions
1 files changed, 49 insertions, 0 deletions
| -rw-r--r-- | Sem. 06/Solutions/exercise06.cpp | 49 |
diff --git a/Sem. 06/Solutions/exercise06.cpp b/Sem. 06/Solutions/exercise06.cpp new file mode 100644 index 0000000..6c52db3 --- /dev/null +++ b/Sem. 06/Solutions/exercise06.cpp @@ -0,0 +1,49 @@ +#include <iostream> + +using namespace std; + +int smallestRemovedNumber(int nums[], int len) { // Works only for non-negative numbers + int pivot = len / 2, diff = 0, smallest = -1, biggest = 0; + + while (pivot > 0) { + // Pivot going to the left + if (nums[pivot - 1] + 1 != nums[pivot]) + smallest = nums[pivot] - 1; + + // Pivot going to the right + if (nums[pivot + diff] + 1 != nums[pivot + diff + 1]) + biggest = nums[pivot + diff] + 1; + + diff += 2 + (pivot % 2); + pivot /= 2; + } + + return (smallest == -1) ? biggest : smallest; +} + +int biggestRemovedNumber(int nums[], int len) { // Works only for non-negative numbers + int pivot = len / 2, diff = 0, smallest = 0, biggest = -1; + + while (pivot > 0) { + // Pivot going to the left + if (nums[pivot - 1] + 1 != nums[pivot]) + smallest = nums[pivot] - 1; + + // Pivot going to the right + if (nums[pivot + diff] + 1 != nums[pivot + diff + 1]) + biggest = nums[pivot + diff] + 1; + + diff += 2 + (pivot % 2); + pivot /= 2; + } + + return (biggest == -1) ? smallest : biggest; +} + +int main() { + int numbers1[7] = { 5, 6, 7, 9, 10, 12, 13 }; + cout << smallestRemovedNumber(numbers1, 7) << " " << biggestRemovedNumber(numbers1, 7) << endl; + + int numbers2[5] = { 10, 12, 13, 14, 16 }; + cout << smallestRemovedNumber(numbers2, 5) << " " << biggestRemovedNumber(numbers2, 5) << endl; +} |
