【算法】【雙指針】Leetcode雙指針題目總結

壓縮字符串

題目鏈接:https://leetcode-cn.com/problems/string-compression/

class Solution {
public:
    int compress(vector<char>& chars) {
        int n = chars.size();
        int cur = 0;
        for(int i = 0, j = 0; i < n;)
        {
            j = i + 1;
            while(j < n && chars[i] == chars[j]) j++;

            if(j - i > 1)
            {
                chars[cur] = chars[i];
                cur += 1;
                string str = to_string(j - i);
                for(auto s : str)
                    chars[cur++] = s;
            }
            else
                chars[cur++] = chars[i];
            i = j;
        }
        return cur;
    }
};

成績小於K的子數組

題目鏈接:https://leetcode-cn.com/problems/subarray-product-less-than-k/

class Solution {
public:
    int numSubarrayProductLessThanK(vector<int>& nums, int k) {
        int n = nums.size();
        int sum = 1;
        int cnt = 0;
        for(int i = 0, j = 0; j < n;)
        {
            sum *= nums[j++];
            while(i < j && sum >= k) 
                sum /= nums[i++];
            cout << j << " " << i << endl; // [i, j);
            //[i, j)的子數組(包含i)個數是 j - i
            cnt += j - i;
        }
        return cnt;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章