Leetcode 九坤投资专场竞赛 20220821

发布于:2023-01-09 ⋅ 阅读:(548) ⋅ 点赞:(0)

九坤投资专场竞赛

写了三题,排名157,没到推荐的要求,要前100。比上午周赛的状态好点,感觉可能这题还难点,但是写的好点。(感觉越在意反而不能写好😔,也有可能上午就是涉及我不怎么遇到的题)

第一题:比普通easy难点,,需要转换一下.其实可以改为,A + B镜像 = A镜像 + B 为 B镜像 - B = A镜像 - A。 那么数对就是,差值相同,就可以组成数对。
第二题:普通dfs
第三题:数据乘下去可能会超级大,所以就用python写了,不用考虑超大的数。只用遍历一遍,求当前和前一个数的最大公倍数,并且判断 两个数到最大公倍数 的乘数 是不是2,3的倍数。
第四题:还想不出来怎么写

九坤-01. 可以读通讯稿的组数

class Solution {
public:
    int numberOfPairs(vector<int>& nums) {
        int n = nums.size();
        vector<long long> dis(n);
        map<long long,int> mp;;
        int mod = 1e9+7;
        for(int i=0;i<nums.size();i++) {
            long long tmp = 0, x = nums[i];
            while(x) {
                tmp = tmp*10 + x%10;
                x /= 10; 
            }
            dis[i] = tmp - nums[i];
            mp[dis[i]] += 1;
        }
        int ans = 0;
        for(int i=0;i<n;i++) {
            if(mp[dis[i]]>=2){        
                ans = (mp[dis[i]] -1 + ans) % mod;
                mp[dis[i]] -= 1;
            }
        }
        return ans;
    }
};

九坤-02. 池塘计数

class Solution {
public:
    int lakeCount(vector<string>& field) {
        int n =field.size(), ans =0;
        queue<pair<int,int>> q;
        int dx[8] = {0,0,1,-1, 1,1,-1,-1};
        int dy[8] = {1,-1,0,0, 1,-1,1,-1};
        
        for(int i=0;i<n;i++) {
            int m = field[i].size();
            for(int j=0;j<m;j++) {
                if(field[i][j]=='W'){
                    ans++;
                    field[i][j] = '.';
                    q.emplace(i,j);
                    
                    while(!q.empty()) {
                        auto[x,y] = q.front();q.pop();
                        for(int k=0;k<8;k++) {
                            int nx = x+ dx[k];
                            int ny = y+ dy[k];
                            if(nx<0||ny<0||nx>=n||ny>=m) continue;
                            if(field[nx][ny]=='W') {
                                field[nx][ny] = '.';
                                q.emplace(nx,ny);
                            }
                        }
                    }
                }
            }
        }
        return ans;
    }
};

九坤-03. 数字默契考验

class Solution:
    def gcd(a,b):
        if b!=0:
            return gcd(b,a%b)
        return a
    def minOperations(self, numbers: List[int]) -> int:
        ans = 0
        flag = 0
        pre = numbers[0]
        def fuc(now, pre):
            de = now / pre
            ans = 0
            if de == 1: return 0
            while(de%3 == 0): 
                de = de//3
                ans = ans + 1
            while(de%2 == 0):
                de = de//2
                ans = ans + 1
            if de!=1: return -1
            return ans
        for i in range(1,len(numbers)):
            x = gcd(pre,numbers[i])
            now = pre // x * numbers[i]
            val1 = fuc(now,pre)
            val2 = fuc(now,numbers[i])
            
            if val1==-1 or val2==-1: 
                flag = 1
            if flag: 
                break
            ans = ans + val1*(i) + val2
            pre = now
            
        if flag: return -1;
        return ans
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到