Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- /*
- int maxOnes(const vector<int>& v) {
- int n = v.size();
- int left = 0;
- int right = 0;
- int ans = 0;
- while (right < n) {
- left = right;
- while (right < n && v[right] == 1) {
- right++;
- }
- ans = max(ans, right - left);
- right++;
- }
- return ans;
- }
- */
- int maxOnes(const vector<int>& v) {
- size_t n = v.size();
- // n > 0
- vector<size_t> starts;
- vector<size_t> lengths;
- if (v[0] == 1) {
- starts.push_back(0);
- }
- for (size_t i = 1; i < n; ++i) {
- if (v[i - 1] == 0 & v[i] == 1) {
- starts.push_back(i);
- }
- }
- if (starts.size() == 1 && starts[0] == 0 && v[n - 1] == 1) {
- // only ones
- return n - 1;
- }
- if (starts.size() == 0) {
- // only zeros
- return 0;
- }
- for (size_t start : starts) {
- size_t i = start;
- while (i < n && v[i] == 1) {
- i++;
- }
- lengths.push_back(i - start);
- }
- size_t ans = 0;
- for (auto length : lengths) {
- ans = max(ans, length);
- }
- for (size_t i = 0; i < lengths.size() - 1; i++) {
- if (starts[i] + lengths[i] + 1 == starts[i + 1]) {
- ans = max(ans, lengths[i] + lengths[i + 1]);
- }
- }
- return ans;
- }
- int main() {
- cout << maxOnes({1, 1, 1, 1}) << endl;
- cout << maxOnes({0, 0, 1, 1}) << endl;
- cout << maxOnes({1, 1, 1, 1, 0, 0, 0, 0, 0}) << endl;
- cout << maxOnes({0, 0, 0}) << endl;
- cout << maxOnes({1}) << endl;
- cout << maxOnes({1, 1, 1, 0, 1, 1}) << endl;
- cout << maxOnes({1,1,1,1, 0,0,0,0,0,1,1,1,1,1,1}) << endl;
- cout << maxOnes({1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1}) << endl;
- cout << maxOnes({1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1}) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement