Moving Stones Until Consecutive II LeetCode solution in C++
1class Solution {2public:3vector<int> numMovesStonesII(vector<int> &stones) {4sort(stones.begin(), stones.end());5int n = stones.size();6int MAX = 0;7int MIN = INT_MAX;8int a = stones.back() - stones[1] + 1 - (n - 1);9int b = stones[n - 2] - stones[0] + 1 - (n - 1);10int j = 0;11MAX = max(a, b);12for (int i = 0; i < n; i++) {13while (j < n && stones[j] - stones[i] + 1 < n) {14j++;15}16if (j >= n) {17break;18}19int gap;20if (stones[j] - stones[i] + 1 == n) {21gap = n - (j - i + 1);22} else if (j - 1 - i + 1 == n - 1) {23gap = 2;24} else {25gap = n - (j - 1 - i + 1);26}27MIN = min(MIN, gap);28}29return {MIN, MAX};30}31};