Longest Turbulent Subarray , Getting W/A for only 1 test case and unable to find mistake , pls help
Anonymous User
58

Testcase : [8,8,9,10,6,8,2,4,2,2,10,6,6,10,10,2,3,5,1,2,10,4,2,0,9,4,9,3,0,6,3,2,3,10,10,6,4,6,4,4,2,5,1,4,1,1,9,8,9,5,3,5,5,4,5,5,6,5,3,3,7,2,0,10,9,7,7,3,5,1,0,9,6,3,1,3,4,4,3,6,3,2,1,4,10,2,3,4,4,3,6,7,6,2,1,7,0,6,8,10]
My o/p : 8 , system o/p : 7

code :

int maxTurbulenceSize(vector<int>& arr) {
        
        int n = arr.size();
        if(n==1) return 1;
        if(n == 2) {
            if(arr[0] == arr[1]) return 1;
            else return 2; 
        }
        vector<int> color(n);
        for(int i=1;i<n;i++)
        {
            if(arr[i] > arr[i-1]) color[i] = 1;
            else if(arr[i] < arr[i-1]) color[i] = 0;
            else color[i] = -1;
        }
        int i = 1;
        while(i<n && color[i]==-1) i++;
        if(i == n) return 1;
        int ans = 0 , l = 2, j=i-1;
        multiset<int> s;
        s.insert(i-1);
        s.insert(i);
        while(i < n-1)
        {
            if(color[i] == !color[i+1])
                s.insert(i+1);
            else if(color[i+1] == -1)
            {
                if(s.size() > ans) ans = s.size();
                s.clear();
                s.insert(i+1);
            }
            else
            {
                if(s.size() > ans) ans = s.size();
                while(j < i){
                    s.erase(j);
                    j++;
                }
                s.insert(i+1);
            }
            i++;
        }
        if(s.size() > ans) ans = s.size();
        return ans;
    }
Comments (1)