Given an array arr that represents a permutation of numbers from 1 to n.
You have a binary string of size n that initially has all its bits set to zero. At each step i (assuming both the binary string and arr are 1-indexed) from 1 to n, the bit at position arr[i] is set to 1.
You are also given an integer m. Find the latest step at which there exists a group of ones of length m. A group of ones is a contiguous substring of 1’s such that it cannot be extended in either direction.
Return the latest step at which there exists a group of ones of length exactly m. If no such group exists, return -1.
dp solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution { public: intfindLatestStep(vector<int>& arr, int m){ int n = arr.size(), res = -1; vector<int> merge(n + 2), count(n + 1); for(int i = 0; i < n; i++) { int a = arr[i], left = merge[a-1], right = merge[a+1]; merge[a] = merge[a-left] = merge[a+right] = right + left + 1; count[left]--; count[right]--; count[merge[a]]++; if(count[m]) res = i + 1; } return res; } };