zoukankan      html  css  js  c++  java
  • LeetCode Weekly Contest 257

    第一题

    class Solution {
        public int countQuadruplets(int[] nums) {
            int n = nums.length;
            int res = 0;
            for(int i=0; i<n; i++){
                for(int j=i+1; j<n; j++){
                    for(int k=j+1; k<n; k++){
                        for(int t =k+1; t < n; t++){
                            if(nums[i]+nums[j]+nums[k] == nums[t]){
                                res++;
                            }
                        }
                    }
                }
            }
            return res;
        }
    }
    

    第二题


    题解:使用单调栈

    class Solution {
    public:
        int numberOfWeakCharacters(vector<vector<int>>& p) {
            sort(p.begin(), p.end(), [](const auto &a, const auto &b){
                if(a[0] == b[0]) return a[1] > b[1];
                return a[0] < b[0];
            });
            
            stack<pair<int, int>> s;
            int n = p.size();
            int count = 0;
            for(int i=0; i<n; i++){
                while(s.size() > 0 &&  s.top().first < p[i][0] && s.top().second < p[i][1]){
                    count++;
                    s.pop();
                }
                s.push({p[i][0], p[i][1]});
            }
            return count;
        }
    };
    

    第三题

    参考题解

    class Solution {
    public:
        int firstDayBeenInAllRooms(vector<int>& a) {
            int n = a.size();
            int mod = 1000000007;
            vector<int> f(n, 0);
            for(int i=1; i<n; i++){
                // 第一次到达 f[i-1] 的天数为 f[i-1]
               // 第二次到达 f[i-1] 的天数为 1 + f[i-1] - f[nextVisit[i-1]]
               // f[i] = (f[i-1] + (1 + f[i-1] - f[nextVisit[i-1]]) + 1) % MOD;
                f[i] = (2*f[i-1]-f[a[i-1]]+2)%mod;
                if(f[i] < 0) f[i] += mod;
            }
            return f[n-1];
        }
    };
    

    第四题

    使用并查集

    const int N = 1e5+10;
    int p[N];
    class Solution {
    public:
        int find(int x){
            if(x != p[x])
              p[x] = find(p[x]);
            return p[x];
        }
        void merge(int a, int b){
            int x = find(a), y = find(b);
            if(x !=y){
                p[x] = y;
            }
        }
    
        bool gcdSort(vector<int>& nums) {
            vector<int> nums1 = nums;
            for(int i=1; i<N; i++) p[i] = i;
            for(int num : nums1){
                int k = num;
                for(int i=2; i<=num/i; i++){
                    bool flag = false;
                    while(num%i == 0){
                        num /= i;
                        flag = true;
                    }
                    if(flag){
                        merge(k, i);
                    }
                }
                if(num > 1){
                    merge(k, num);
                }
            }
            sort(nums.begin(), nums.end());
            for(int i=0; i<nums.size(); i++){
                if(nums[i] == nums1[i]) continue;
                if(find(nums[i]) != find(nums1[i])) return false;
            }
            return true;
        }
    };
    
  • 相关阅读:
    批处理文件双击运行成功,程序调用却运行失败解决方案
    前端安全之加解密种类与HTTPS加密原理(二)
    node包管理nvm与pnpm(一)
    React状态管理—reduxAPI原理分析(三)
    动态规划原理与算法实践(二)
    双指针算法基本原理和实践(一)
    分治算法基本原理和实践(三)
    编程范式(一)
    Java基础
    前端模块化CommonJS、AMD、CMD、ES6模块(二)
  • 原文地址:https://www.cnblogs.com/lzeffort/p/15230689.html
Copyright © 2011-2022 走看看