第 385 场 LeetCode 周赛题解

这篇具有很好参考价值的文章主要介绍了第 385 场 LeetCode 周赛题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

A 统计前后缀下标对 I

第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希
第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希

模拟

class Solution {
public:
    int countPrefixSuffixPairs(vector<string> &words) {
        int n = words.size();
        int res = 0;
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++)
                if (words[i].size() <= words[j].size()) {
                    int li = words[i].size(), lj = words[j].size();
                    if (words[i] == words[j].substr(0, li) && words[i] == words[j].substr(lj - li, li))
                        res++;
                }
        return res;
    }
};

B 最长公共前缀的长度

第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希
第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希

字典树:先将 a r r 1 arr1 arr1 中元素加入字典树,然后遍历 a r r 2 arr2 arr2 中元素,在字典树上查询最长的匹配的前缀

class Solution {
public:
    int longestCommonPrefix(vector<int> &arr1, vector<int> &arr2) {
        trie tree;
        for (auto x: arr1)
            tree.insert(x);
        int res = 0;
        for (auto x: arr2)
            res = max(res, tree.query(x));
        return res;
    }

    class trie {//字典树
    public:
        vector<trie *> next;

        trie() {
            next = vector<trie *>(10);
        }

        void insert(int x) {
            string s = to_string(x);
            trie *cur = this;
            for (auto c: s) {
                if (!cur->next[c - '0'])
                    cur->next[c - '0'] = new trie();
                cur = cur->next[c - '0'];
            }
        }

        int query(int x) {
            string s = to_string(x);
            trie *cur = this;
            int res = 0;
            for (auto c: s)
                if (cur->next[c - '0']) {
                    res++;
                    cur = cur->next[c - '0'];
                } else
                    break;
            return res;
        }
    };
};

C 出现频率最高的素数

第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希
第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希
第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希
第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希

枚举:枚举并计数各个单元格向各方向能生成的大于10的素数

class Solution {
public:
    int mostFrequentPrime(vector<vector<int>> &mat) {
        int m = mat.size(), n = mat[0].size();
        int dr[8] = {1, 0, -1, 0, 1, 1, -1, -1};
        int dc[8] = {0, 1, 0, -1, 1, -1, 1, -1};
        unordered_map<int, int> cnt;
        for (int r = 0; r < m; r++)
            for (int c = 0; c < n; c++) {
                for (int k = 0; k < 8; k++) {
                    int cur = mat[r][c];
                    for (int nr = r + dr[k], nc = c + dc[k];; nr += dr[k], nc += dc[k]) {
                        if (nr < 0 || nr >= m || nc < 0 || nc >= n)
                            break;
                        cur = cur * 10 + mat[nr][nc];
                        if (isprime(cur))
                            cnt[cur]++;
                    }
                }
            }
        int mx = 0, res = -1;
        for (auto &[vi, ci]: cnt)
            if (ci > mx || ci == mx && vi > res) {
                res = vi;
                mx = ci;
            }
        return res;
    }

    bool isprime(int x) {
        for (int i = 2; i * i <= x; i++)
            if (x % i == 0)
                return false;
        return true;
    }
};

D 统计前后缀下标对 II

第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希
第 385 场 LeetCode 周赛题解,LeetCode,leetcode,算法,模拟,字典树,哈希,字符串哈希

哈希 + 字符串哈希:遍历 w o r d [ i ] word[i] word[i] ,枚举 w o r d [ i ] word[i] word[i] 的前缀,若其长为 l l l 的前缀和长为 l l l 的后缀相同,则答案增加 w o r d [ 0 , i − 1 ] word[0,i-1] word[0,i1] w o r d [ i ] word[i] word[i] 长为 l l l 的前缀的出现次数文章来源地址https://www.toymoban.com/news/detail-835091.html

class Solution {
public:
    long long countPrefixSuffixPairs(vector<string> &words) {
        int n = words.size();
        srand(time(0));
        int e = 2333 + rand() % 10, mod = 1e9 + rand() % 10;
        unordered_map<int, int> cnt;//记录字符串(通过哈希值表示)的出现次数
        long long res = 0;
        for (int i = 0; i < n; i++) {
            shash hi(words[i], e, mod);
            int m = words[i].size();
            for (int l = 1; l <= m; l++) {
                if (auto pre = hi(0, l - 1);pre == hi(m - l, m - 1) && cnt.count(pre))
                    res += cnt[pre];
            }
            cnt[hi(0, m - 1)]++;
        }
        return res;
    }

    class shash {//字符串哈希模板
    public:
        using ll = long long;
        vector<ll> pres;
        vector<ll> epow;
        ll e, p;

        shash(string &s, ll e, ll p) {
            int n = s.size();
            this->e = e;
            this->p = p;
            pres = vector<ll>(n + 1);
            epow = vector<ll>(n + 1);
            epow[0] = 1;
            for (int i = 0; i < n; i++) {
                pres[i + 1] = (pres[i] * e + s[i]) % p;
                epow[i + 1] = (epow[i] * e) % p;
            }
        }

        ll operator()(int l, int r) {
            ll res = (pres[r + 1] - pres[l] * epow[r - l + 1] % p) % p;
            return (res + p) % p;
        }
    };
};

到了这里,关于第 385 场 LeetCode 周赛题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第 122 场 LeetCode 双周赛题解

    A 将数组分成最小总代价的子数组 I 枚举:枚举后两个子数组的起始下标 B 判断一个数组是否可以变为有序 模拟:模拟冒泡排序的过程,若相邻元素大小关系需要交换位置,但其二进制下数位为 1 的数目不同,则返回false,若完成排序返回true C 通过操作使数组长度最小 脑筋急

    2024年01月22日
    浏览(40)
  • LeetCode 第 388 场周赛个人题解

    目录 100233. 重新分装苹果 原题链接 思路分析 AC代码 100247. 幸福值最大化的选择方案 原题链接 思路分析 AC代码 100251. 数组中的最短非公共子字符串 原题链接 思路分析 AC代码 100216. K 个不相交子数组的最大能量值 原题链接 思路分析 AC代码 100233. 重新分装苹果 直接模拟 降序排

    2024年03月15日
    浏览(59)
  • 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 哈希

    机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位

    2024年02月15日
    浏览(37)
  • LeetCode 第384 场周赛题解(JavaScript版)

    废话不多说,我们来直接看题目!没参与本次周赛的小伙伴也可以先点进去自己试试看!第 384 场周赛 - 力扣(LeetCode) 好的家人们,这个第一题,我们也是必须拿下的好吧,一道非常简单的模拟送分题,它的意思是, 让我们把矩阵中,值为-1的数,变为它所在这一列最大的

    2024年02月22日
    浏览(38)
  • LeetCode热题100 【cpp】题解(一)哈希表和双指针

    题单链接: LeetCode 热题 100 leetcode题目链接 题解1:暴力枚举 时间复杂度: O ( n 2 ) O(n^2) O ( n 2 ) 题解2:哈希表 时间复杂度: O ( n ) O(n) O ( n ) 使用hash表来存target - x的差值的下标。这里使用cpp里面的 unordered_map ,它的查找效率为 O ( 1 ) O(1) O ( 1 ) 补充 unordered_map 查找key的方法:

    2024年02月09日
    浏览(27)
  • LeetCode 周赛 341 场,模拟 / 树上差分 / Tarjan 离线 LCA / DFS

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末有单双周赛,双周赛我们讲过了,单周赛那天早上有事没参加,后面做了虚拟竞赛,然后整个人就不好了。前 3 题非常简单,但第 4 题有点东西啊,差点就放弃了。最后,

    2023年04月20日
    浏览(40)
  • LeetCode 833. Find And Replace in String【字符串,哈希表,模拟】1460

    本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,

    2024年02月12日
    浏览(43)
  • Leetcode题解-算法-动态规划(python版)

    1.1 爬楼梯 70. 爬楼梯(Easy) 走n阶楼梯的方法有两种,1、先走 1 级台阶,再走 n-1 级台阶;2、先走 2 级台阶,再走 n-2 级台阶 f(n) = f(n-1) + f(n-2) 1.2 强盗抢劫 198. 打家劫舍(Medium) 每个房间财产为 nums[0]……nums[n-1]。 假设 0 至 x 间房获得的最大财产为 f(x)。 f(x) = max(f(x-1),f(x-2)+nums[

    2024年02月03日
    浏览(48)
  • 【LeetCode算法系列题解】第46~50题

    【题目描述】 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以按 任意顺序 返回答案。 【示例1】 【示例2】 【示例3】 【提示】 1 ≤ n u m s . l e n g t h ≤ 6 1le nums.lengthle 6 1 ≤ n u m s . l e n g t h ≤ 6 − 10 ≤ n u m s [ i ] ≤ 10 -10le nums[i]le 10 − 10 ≤ n u

    2024年02月10日
    浏览(35)
  • 【LeetCode算法系列题解】第36~40题

    【题目描述】 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次(请参考示例图)。 注意: 一个有效

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包