Advertisement
goshansmails

Untitled

Mar 6th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6. /*
  7. int maxOnes(const vector<int>& v) {
  8.     int n = v.size();
  9.     int left = 0;
  10.     int right = 0;
  11.     int ans = 0;
  12.     while (right < n) {
  13.         left = right;
  14.         while (right < n && v[right] == 1) {
  15.             right++;
  16.         }
  17.         ans = max(ans, right - left);
  18.         right++;
  19.     }
  20.     return ans;
  21. }
  22.  */
  23.  
  24. int maxOnes(const vector<int>& v) {
  25.     size_t n = v.size();
  26.     // n > 0
  27.     vector<size_t> starts;
  28.     vector<size_t> lengths;
  29.  
  30.     if (v[0] == 1) {
  31.         starts.push_back(0);
  32.     }
  33.     for (size_t i = 1; i < n; ++i) {
  34.         if (v[i - 1] == 0 & v[i] == 1) {
  35.             starts.push_back(i);
  36.         }
  37.     }
  38.  
  39.     if (starts.size() == 1 && starts[0] == 0 && v[n - 1] == 1) {
  40.         // only ones
  41.         return n - 1;
  42.     }
  43.  
  44.     if (starts.size() == 0) {
  45.         // only zeros
  46.         return 0;
  47.     }
  48.  
  49.     for (size_t start : starts) {
  50.         size_t i = start;
  51.         while (i < n && v[i] == 1) {
  52.             i++;
  53.         }
  54.         lengths.push_back(i - start);
  55.     }
  56.  
  57.     size_t ans = 0;
  58.     for (auto length : lengths) {
  59.         ans = max(ans, length);
  60.     }
  61.  
  62.     for (size_t i = 0; i < lengths.size() - 1; i++) {
  63.         if (starts[i] + lengths[i] + 1 == starts[i + 1]) {
  64.             ans = max(ans, lengths[i] + lengths[i + 1]);
  65.         }
  66.     }
  67.  
  68.     return ans;
  69. }
  70. int main() {
  71.  
  72.     cout << maxOnes({1, 1, 1, 1}) << endl;
  73.     cout << maxOnes({0, 0, 1, 1}) << endl;
  74.     cout << maxOnes({1, 1, 1, 1, 0, 0, 0, 0, 0}) << endl;
  75.     cout << maxOnes({0, 0, 0}) << endl;
  76.     cout << maxOnes({1}) << endl;
  77.     cout << maxOnes({1, 1, 1, 0, 1, 1}) << endl;
  78.     cout << maxOnes({1,1,1,1, 0,0,0,0,0,1,1,1,1,1,1}) << endl;
  79.     cout << maxOnes({1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1}) << endl;
  80.     cout << maxOnes({1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1}) << endl;
  81.  
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement