Leet Code

🧩 Syntax:
class Solution {
public:
    int minMoves(vector<int>& nums, int k) {
        
        const int n = (int)nums.size();
        vector <long long> pref, suff;
        long long sum = 0, back = 0;
        for (int i = 0; i < n; i++)
        {
            if (nums[i] == 1)
            {
                sum += (i-back);
                pref.push_back(sum);
                // back = i;
            }
        }

        sum = 0, back = n-1;
        for (int i = n-1; i >= 0; i--)
        {
            if (nums[i] == 1)
            {
                sum += (back-i);
                suff.push_back(sum);
                // back = i;
            }
        }
        reverse(suff.begin(), suff.end());
        vector <long long> ones;
        for (int i = 0; i < n; i++)
        {
            if (nums[i] == 1)
            ones.push_back(i);
        }

        const int sz = (int)ones.size();
        int ans = INT_MAX;
        for (int i = 0; i < sz; i++)
        {
            int l = (k-1)/2;
            int r = (k-1)-l;
            // cout << i << " " << l << " " << r << endl;
            if (i-l >= 0 && i+r < sz)
            {
            ans = min(ans, (int)(pref[i+r]-pref[i]-(r)*ones[i] + suff[i-l]-suff[i]-(l)*(n-ones[i]-1)-((l*(l+1))/2 + (r*(r+1))/2)));
            }
            if (i-r >= 0 && i+l < sz)
            ans = min(ans, (int)(pref[i+l]-pref[i]-(l)*ones[i] + suff[i-r]-suff[i]-(r)*(n-ones[i]-1)-((l*(l+1))/2 + (r*(r+1))/2)));
            
        }

        return ans;
    }
};