../ Competitive Programming
-rw-r--r--aguang3.8 KiB3 min read

Leet Code Weekly Contest 286

1. Find the Difference of Two Arrays

  • Hash-set.
c++
class Solution {
public:
    vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> set1(nums1.begin(), nums1.end()), set2(nums2.begin(), nums2.end());
        vector<vector<int>> ans(2);
        
        for (auto &x : set1) {
            if (set2.find(x) == set2.end()) {
                ans[0].push_back(x);
            }
        }
        
        for (auto &x : set2) {
            if (set1.find(x) == set1.end()) {
                ans[1].push_back(x);
            }
        }
        
        return ans;
    }
};

2. Minimum Deletions to Make Array Beautiful

  • Greedy, if we keep nums[i], then delete all same elements on the right side of nums[i].
c++
class Solution {
public:
    int minDeletion(vector<int>& nums) {
        int n = nums.size();
        vector<int> g(n, -1), f(n + 1, 0);
        
        for (int i = n - 2; i >= 0; i--) {
            if (nums[i + 1] == nums[i]) {
                g[i] = g[i + 1];
            } else {
                g[i] = i + 1;
            }
        }
        
        int ans = 0;
        
        for (int i = n - 2; i >= 0; i--) {
            if (g[i] != -1) {
                f[i] = f[g[i] + 1] + 2;
            } else {
                f[i] = 0;
            }
            
            ans = max(ans, f[i]);
        }
        
        return n - ans;
    }
};

3. Find Palindrome With Fixed Length

  • For the q-th smallest palindrome of length intLength, the upper-half part of the parlindrome should be 10intLength+q−110^{\text{intLength}} + q - 1
c++
class Solution {
public:
    
    long long toFull(long long high, int len) {  
        long long ret = high;
        
        vector<long long> digits;
        
        while (high > 0) {
            digits.push_back(high % 10);
            high = high / 10;
        }
        
        reverse(digits.begin(), digits.end());
        
        for (int i = 0; i < len; i++) {
            ret = ret * 10 + (digits[len - i - 1]);
        }
        
        return ret;
    }
    
    vector<long long> kthPalindrome(vector<int>& queries, int intLength) {
        long long halfLength = (intLength + 1) / 2;
        long long base = pow(10, halfLength - 1) - 1;
        long long upper = pow(10, halfLength) - 1;
        
        vector<long long> ans;
        
        for (auto &q : queries) {
            long long high = base + q;
            
            if (high > upper) {
                ans.push_back(-1);
            } else {
                ans.push_back(toFull(high, intLength - halfLength));
            }
        }
        
        return ans;
    }
};

4. Maximum Value of K Coins From Piles

  • DP.
c++
class Solution {
public:
    int maxValueOfCoins(vector<vector<int>>& piles, int k) {
        int n = piles.size();
        
        vector<vector<int>> g(n);
        for (int i = 0; i < n; i++) {
            g[i].push_back(0);
            for (int j = 0; j < piles[i].size(); j++) {
                g[i].push_back(g[i].back() + piles[i][j]);
            }
        }
        
        vector<vector<int>> f(n, vector<int>(k + 1, 0));
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= k; j++) {
                f[i][j] = 0;
                
                if (i > 0) {
                    f[i][j] = max(f[i][j], f[i - 1][j]);
                }
                
                for (int p = 0; p <= piles[i].size() && p <= j; p++) {
                    
                    int tmp = g[i][p];
                    
                    if (i > 0) {
                        tmp += f[i - 1][j - p];
                    }
                    
                    f[i][j] = max(f[i][j], tmp);
                }
            }
        }
        
        return f[n - 1][k];
    }
};

COMMAND INTERFACE

↑ ↓ navigate · Enter execute · Esc exit · try “whoami”

Loading filesystem…

:help aguang.xyz

A personal website disguised as an operating system.

Ctrl / Cmd + K
Command palette + full-text search
Tab / Shift + Tab
Move between links and controls
Enter
Open a focused link or search result
↑ / ↓ in search
Navigate search results
In a directory filter
Enter/Done or ↓ focuses a result; Esc clears the filter
Esc
Clear a search or close a window