力扣第455场周赛

【算法刷题指南】从零开始的LeetCode系统训练(持续更新 & 分类索引) 本文提供了一份从零开始的LeetCode系统刷题指南,帮助读者建立算法思维体系。通过分类训练、模板化解题技巧和错题本管理,有效提升算法能力。涵盖哈希、双指针、滑动窗口、二叉树、回溯、动态规划等核心模块,适合准备大厂面试的开发者。 阅读详情

 Q1. 检查元素频次是否为质数

给你一个整数数组 nums。

如果数组中任一元素的 频次 是 质数,返回 true;否则,返回 false。

元素 x 的 频次 是它在数组中出现的次数。

质数是一个大于 1 的自然数,并且只有两个因数:1 和它本身。

示例 1:

输入: nums = [1,2,3,4,5,4]

输出: true

解释:

数字 4 的频次是 2,而 2 是质数。

示例 2:

输入: nums = [1,2,3,4,5]

输出: false

解释:

所有元素的频次都是 1。

示例 3:

输入: nums = [2,2,2,4,4]

输出: true

解释:

数字 2 和 4 的频次都是质数。

提示:

1 <= nums.length <= 100
0 <= nums[i] <= 100

class Solution {
public:
    bool solve(int num){
        for(int i=2;i<=sqrt(num);i++){
            if(num%i==0) return false;
        }
        return true;
    }
    bool checkPrimeFrequency(vector<int>& nums) {
        unordered_map<int,int> mp;
        for(auto& x:nums){
            mp[x]++;
        }
        for(auto& x:mp){
            int n=x.second;
            if(solve(n)&&(n>=2)) return true;
        }
        return false;
    }
};

Q2. 硬币面值还原

给你一个 从 1 开始计数 的整数数组 numWays,其中 numWays[i] 表示使用某些 固定 面值的硬币(每种面值可以使用无限次)凑出总金额 i 的方法数。每种面值都是一个 正整数 ,并且其值 最多 为 numWays.length。

然而,具体的硬币面值已经 丢失 。你的任务是还原出可能生成这个 numWays 数组的面值集合。

返回一个按从小到大顺序排列的数组,其中包含所有可能的 唯一 整数面值。

如果不存在这样的集合,返回一个 空 数组。

示例 1:

输入: numWays = [0,1,0,2,0,3,0,4,0,5]

输出: [2,4,6]

class Solution {
public:
    vector<int> findCoins(vector<int>& numWays) {
        int n=numWays.size();
        vector<int> dp(n+1,0);
        dp[0]=1;
        vector<int> res;
        for(int i=1;i<=n;i++){
            int cur=dp[i];
            int tar=numWays[i-1];
            if(cur>tar) return {};
            if(cur==tar) continue;
            if(cur+1==tar){
                res.push_back(i);
                for(int j=i;j<=n;j++){
                    dp[j]+=dp[j-i];
                }
            }else{
                return {};
            }
        }
        return res;
    }
};
// numWays[i]和i+1/numWays[i-1]和i
// 已知方法数, 求是由那些硬币构成的©leetcode

 Q3. 使叶子路径成本相等的最小增量

给你一个整数 n,以及一个无向树,该树以节点 0 为根节点,包含 n 个节点,节点编号从 0 到 n - 1。这棵树由一个长度为 n - 1 的二维数组 edges 表示,其中 edges[i] = [ui, vi] 表示节点 ui 和节点 vi 之间存在一条边。
每个节点 i 都有一个关联的成本 cost[i],表示经过该节点的成本。

路径得分 定义为路径上所有节点成本的总和。

你的目标是通过给任意数量的节点 增加 成本(可以增加任意非负值),使得所有从根节点到叶子节点的路径得分 相等 。

返回需要增加成本的节点数的 最小值 。

示例 1:

输入: n = 3, edges = [[0,1],[0,2]], cost = [2,1,3]

输出: 1

using pii=pair<int,int>;
class Solution {
public:
    int minIncrease(int n, vector<vector<int>>& edges, vector<int>& cost) {
        vector<vector<int>> g(n);
        for(auto& e:edges){
            g[e[0]].push_back(e[1]);
            g[e[1]].push_back(e[0]);
        }
        function<pii(int,int)> dfs=[&](int u, int p)->pii{
            bool is_leaf=true;
            int maxSum=0;
            int total_adds=0;
            vector<pii> ch;
            for(int v:g[u]){
                if(v==p) continue;
                is_leaf=false;
                auto[sum_v,adds_v]=dfs(v,u);
                maxSum=max(maxSum,sum_v);
                ch.push_back({sum_v,adds_v});
            }
            if(is_leaf) return {cost[u],0};
            for(auto& c: ch){
                auto [sum_v, adds_v]=c;
                if (sum_v<maxSum){
                    total_adds+=adds_v+1;
                } else {
                    total_adds += adds_v;
                }

            }
            return {cost[u]+maxSum,total_adds};
        };
        auto [_, ans]=dfs(0,-1);
        return ans;
    } 
};

 Q4. 所有人渡河所需的最短时间

有 n 名人员在一个营地,他们需要使用一艘船过河到达目的地。这艘船一次最多可以承载 k 人。渡河过程受到环境条件的影响,这些条件以 周期性 的方式在 m 个阶段内变化。
每个阶段 j 都有一个速度倍率 mul[j]:

如果 mul[j] > 1,渡河时间会变长。
如果 mul[j] < 1,渡河时间会缩短。
每个人 i 都有一个划船能力,用 time[i] 表示,即在中性条件下(倍率为 1 时)单独渡河所需的时间(以分钟为单位)。

规则:

从阶段 j 出发的一组人 g 渡河所需的时间(以分钟为单位)为组内成员的 最大 time[i],乘以 mul[j] 。
该组人渡河所需的时间为 d,阶段会前进 floor(d) % m 步。
如果还有人留在营地,则必须有一人带着船返回。设返回人的索引为 r,返回所需时间为 time[r] × mul[current_stage],记为 return_time,阶段会前进 floor(return_time) % m 步。
返回将所有人渡河所需的 最少总时间 。如果无法将所有人渡河,则返回 -1。

示例 1:

输入: n = 1, k = 1, m = 2, time = [5], mul = [1.0,1.3]

输出: 5.00000

解释:

第 0 个人从阶段 0 出发,渡河时间 = 5 × 1.00 = 5.00 分钟。
所有人已经到达目的地,因此总时间为 5.00 分钟。
示例 2:

输入: n = 3, k = 2, m = 3, time = [2,5,8], mul = [1.0,1.5,0.75]

输出: 14.50000

解释:

最佳策略如下:

第 0 和第 2 个人从阶段 0 出发渡河,时间为 max(2, 8) × mul[0] = 8 × 1.00 = 8.00 分钟。阶段前进 floor(8.00) % 3 = 2 步,下一个阶段为 (0 + 2) % 3 = 2。
第 0 个人从阶段 2 独自返回营地,返回时间为 2 × mul[2] = 2 × 0.75 = 1.50 分钟。阶段前进 floor(1.50) % 3 = 1 步,下一个阶段为 (2 + 1) % 3 = 0。
第 0 和第 1 个人从阶段 0 出发渡河,时间为 max(2, 5) × mul[0] = 5 × 1.00 = 5.00 分钟。阶段前进 floor(5.00) % 3 = 2 步,最终阶段为 (0 + 2) % 3 = 2。
所有人已经到达目的地,总时间为 8.00 + 1.50 + 5.00 = 14.50 分钟。
示例 3:

输入: n = 2, k = 1, m = 2, time = [10,10], mul = [2.0,2.0]

输出: -1.00000

解释:

由于船每次只能载一人,因此无法将两人全部渡河,总会有一人留在营地。因此答案为 -1.00。
 

提示:

1 <= n == time.length <= 12
1 <= k <= 5
1 <= m <= 5
1 <= time[i] <= 100
m == mul.length
0.5 <= mul[i] <= 2.0

class Solution {
public:
    double minTime(int n, int k, int m, vector<int>& time, vector<double>& mul) {
        int u = 1 << n;
        vector<int> max_time(u);
        for (int i = 0; i < n; i++) {
            int t = time[i];
            int high_bit = 1 << i;
            for (int mask = 0; mask < high_bit; mask++) {
                max_time[high_bit | mask] =
                    max({max_time[high_bit | mask], max_time[mask], t});
            }
        }
        for (int i = 0; i < u; i++) {
            if (__builtin_popcount(i) > k) {
                max_time[i] = INT_MAX;
            }
        }
        vector dis(m, vector<double>(u, INT_MAX));
        priority_queue<tuple<double, int, int>, vector<tuple<double, int, int>>, greater<>> pq;
        auto push = [&](double d, int stage, int mask) {
            if (d < dis[stage][mask]) {
                dis[stage][mask] = d;
                pq.emplace(d, stage, mask);
            }
        };
        push(0, 0, u - 1); // 起点河岸
        while (!pq.empty()) {
            auto [d, stage, left] = pq.top();
            pq.pop();
            if (left == 0) {
                return d;
            }
            if (d > dis[stage][left]) {
                continue;
            }
            for (int sub = left; sub > 0; sub = (sub - 1) & left) {
                if (max_time[sub] == INT_MAX) {
                    continue;
                }
                double cost = max_time[sub] * mul[stage];
                int cur_stage = (stage + int(cost)) % m;
                if (sub == left) {
                    push(d + cost, cur_stage, 0);
                    continue;
                }
                for (int s = (u - 1) ^ left ^ sub, lb; s > 0; s ^= lb) {
                    lb = s & -s;
                    double return_time = max_time[lb] * mul[cur_stage];
                    push(d + cost + return_time, (cur_stage + int(return_time)) % m, left ^ sub ^ lb);
                }
            }
        }
        return -1;
    }
};
// 1. floor(d) % m  -> 阶段前进
// 把来回渡河一次所用的时间为边
// 单次渡河所用时间为:渡河集合中最大的time[i]
// 每个阶段枚举需要渡河的人,

感谢大家的点赞和关注,你们的支持是我创作的动力!

LeetCode高效刷题全攻略:从环境搭建到实战模板的系统方法论 算法与数据结构是计算机科学的核心基础,它们通过特定的逻辑组织和操作规则,为解决复杂问题提供高效方案。其原理在于将问题抽象为可计算模型,利用时间与空间复杂度的权衡来优化性能。掌握这些基础对于提升编程能力、优化系统性能具有重要技术价值,广泛应用于搜索引擎、推荐系统、数据库索引等场景。本文聚焦于LeetCode刷题实践,系统性地分享了从环境配置、科学路线规划到高频题型模板的完整方法论,旨在帮助开发者通过刻意练习,将算法知识内化为解决实际编码问题的能力,有效应对技术面试中的动态规划与二分查找等经典考察点。 阅读详情

相关推荐

LeetCode高效刷题宝典:从核心思维到实战技巧的系统性指南

算法是计算机科学的核心基础,其本质是通过特定的数据结构和计算步骤高效解决问题。理解算法的关键在于掌握其底层原理,例如时间与空间复杂度的权衡、递归与迭代的转换,以及如何针对不同问题场景选择最优策略。这种能力的技术价值在于,它能显著提升软件的执行效率、资源利用率和系统可扩展性,是构建高性能应用和解决复杂工程问题的基石。在应用场景上,算法广泛应用于搜索引擎、推荐系统、数据库索引、网络路由、图像处理乃至人工智能等各个领域。本文聚焦于**LeetCode刷题**这一具体实践,旨在通过系统性的**五毒神掌**方法论,帮

weixin_33860553的博客 344

算法竞赛>力扣>周赛 | weekly-contest-455

算法竞赛>力扣>周赛:数学、动态规划、树、深度优先搜索

字节幺零二四的博客 725

F460 CLK配置功能模块说明

F460CLK配置功能模块说明 目录 F460CLK配置功能模块说明 CLK配置: 1. DDL_ICG——初始化配置 2. DDL_UTILITY——基础功能函数 3.DDL_PRINT-待细化 4.DDL_ADC 5.DDL_AES——AES 加解密算法处理器 6.DDL_CAN 7. DDL_CLK 8. DDL_CMP——电压比较器 9. DDL_CRC 10. DDL_DCU——数据计算单元 11. DDL_DMAC——DMA 控制器 ...

childboy的博客 2455

历次周赛、专场竞赛、春秋赛题目场次及对应具体题目题号+链接汇总

Warm Up Contest: 386.字典序排数 387.字符串中的第一个唯一字符 388.文件的最长绝对路径 Weekly Contest 2: 389. 找不同 390. 消除游戏 391. 完美矩形 Weekly Contest 3: 392. 判断子序列 393. UTF-8 编码验证 394. 字符串解码 395. 至少有 K 个重复字符的最长子串 Weekly Contest 4: 396. 旋转函数 397. 整数替换 398. 随机数索引 399. 除法求值 Weekly Contest

zhuruihe2014的博客 5313

5分钟搞懂超分算法:从插值到深度学习的实战对比(附Python代码)

本文系统对比了从传统插值到深度学习的主流超分算法,包括最近邻、双线性、双三次插值,以及基于边缘、统计模型和SRCNN、ESPCN、SRGAN等深度学习模型。通过实战代码和决策框架,帮助开发者根据图像质量、速度、资源等需求,快速选择最合适的超分辨率算法,实现从低清到高清的有效转换。

pp12345的博客 427

华三R4900 G5服务器实战:用PMC P460-B4阵列卡配置RAID1+RAID6,并搞定CentOS 7.9安装(含热备盘设置)

本文详细解析了在华三R4900 G5服务器上使用PMC P460-B4阵列卡配置RAID1+RAID6混合阵列的全过程,包括热备盘设置和CentOS 7.9系统安装。通过实战步骤和性能优化建议,帮助企业IT人员高效部署高可用存储方案,特别适合需要数据冗余和系统稳定性的企业级应用场景。

weixin_29248653的博客 357

LeetCode刷题记录

每天进步一点点! LeetCode刷题记录目录1.日常刷题2.每日一题3.周赛 1.日常刷题 题目 难度 NO.1 二维数组中的查找(数组、二分法) ⭐⭐ 2.每日一题 题目 难度 46&47_全排列I&II ⭐⭐ 3.周赛 题目 难度 周赛 20201004 ⭐⭐⭐⭐ 周赛 20201213 ⭐⭐⭐ ...

qq_39618369的博客 479

STM32F103 串口DMA + 空闲中断 实现不定长数据收发

文章目录1. 空闲中断1.1 uart_dma.c1.2 uart_dma.h1.3 main.c1.4 stm32f10x_it.c1.5 效果演示1.6 知识补充1.6.1 外设的基地址     DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU

夏夜晚风_的博客 3万+

Leetcode 刷题目录

Leetcode 刷题目录 按照 Leetcode 题解 这份刷题目录解的题,如果有题目出现在 Leetcode 题解 以外,就是碰到过的题目。 Github地址: Leetcode 刷题目录 算法思想 双指针 167. 有序数组的 Two Sum 633. 两数平方和 345. 反转字符串中的元音字符 680. 回文字符串 88. 归并两个有序数组 141. 判断链表是否存在环 524. 最长子序列 二分查找 69. 求开方 744. 大于给定元素的最小元素 5

GoldenaArcher的博客 874

ESP32+MAX7219二进制时钟设计与嵌入式时间映射实践

二进制时钟是嵌入式系统中数据表示与物理呈现深度耦合的典型范例,其核心在于将时间语义(年月日时分秒)解构为比特位,并通过LED点阵的空间权重布局实现直观识别。该设计依托RTC模块提供时间基准,依赖SPI协议完成微控制器与专用驱动芯片(如MAX7219)的可靠通信,涉及寄存器级配置、位图坐标变换、软硬件时序对齐等关键原理。技术价值体现在低资源占用下的高可读性人机交互,适用于教学演示、极客项目及嵌入式UI原型开发。本文聚焦ESP32平台在MicroPython环境下,结合MAX7219驱动8×8点阵实现高可靠性二

weixin_42160645的博客 299

手把手教你用开源EtherCAT协议栈SOEM开发从站设备(附避坑指南)

本文详细介绍了如何使用开源EtherCAT从站协议栈SOES进行嵌入式设备开发。内容涵盖从环境搭建、硬件准备到核心的对象字典与PDO映射配置,并重点分享了主循环集成、状态机处理以及实战调试中的常见问题与避坑指南,旨在帮助开发者高效实现设备接入工业现场总线网络。

linux的博客 624

LeetCode高效刷题全攻略:从环境搭建到五步心法,构建算法提升系统

算法是计算机科学的核心基础,其本质是通过一系列指令高效解决特定问题的过程。理解算法原理,关键在于掌握数据结构与算法思想之间的内在联系,例如通过哈希表实现快速查找,或利用动态规划优化重叠子问题。掌握算法能力的技术价值在于提升问题解决效率、优化系统性能,并培养严谨的计算思维。在工程实践中,算法能力广泛应用于搜索引擎、推荐系统、数据库索引及高并发处理等场景。对于开发者而言,系统性地提升算法能力是应对技术面试和解决复杂工程问题的关键。本文以备受推崇的“谷歌大佬刷题宝典”为引,深入解析其背后的结构化学习路径与刻意练习

weixin_30372371的博客 468

海思Hi3559A/CV100 DDR4参数配置经验分享

海思Hi3559A/CV100 DDR4参数配置方法 Hi3559AV100 DDR4 驱动配置说明 1.1 Hi3559AV100 DDR4 CLK/AC 驱动配置方法 寄存器地址 DDR PHY0:0x1206d0bc DDR PHY1:0x1206f0bc 寄存器描述 − Bit[5:3]:CLK 驱动 − Bit[14:12]:2T 驱动 − Bit[20:18]:1T 驱动 驱动大小定义 − 000:Disable − 001:240ohm − 010: 120ohm − 011:80ohm −

WeChat_zhanggong345的博客 2878

代码随想录一刷打卡——贪心(上篇)

一个本硕双非的小菜鸡,备战24年秋招,计划刷完卡子哥的刷题计划,加油!

qq_43264167的博客 177

手把手教你学RDMA驱动开发专栏--第7章 队列对(QP)与数据传输实现​7.3 完成队列(CQ):事件通知机制与轮询/中断模式

本章详细探讨了RDMA驱动中完成队列(CQ)的事件通知机制,重点分析了轮询与中断两种模式的实现原理及优化策略。CQ作为操作结果的报告载体,其核心功能包括结果反馈、事件通知和资源同步。轮询模式通过主动查询实现低延迟,适合高性能场景;中断模式通过被动通知节省CPU资源,适用于低频事件处理。驱动实现需考虑CQ溢出防护、多QP共享同步等关键问题,并提供事件通道机制将CQE传递给用户态。通过对比两种模式的优缺点及适用场景,揭示了RDMA系统在性能与资源间的权衡机制。

MHD0815的博客 395

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode Hot 100 链表专题 三· 3 题(Java)

收录题目:2. 两数相加、19. 删除链表的倒数第 N 个结点、24. 两两交换链表中的节点。 统一结构:① 题目分析与解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结。 贯穿三题的两条主线:虚拟头结点 dummy(统一处理头结点被修改的场景)与 指针修改顺序(避免断链、丢引用)。

2401_88612756的博客 481

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode 每日一题 2026/11/2-2026/11/8

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 174

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等) 题目描述: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: - s = s1 + s2 + ... + sn - t = t1 + t2 + ... + tm - |n - m| <= 1 - 交错 是 s1 + t

huayimenghan的博客 198

LeetCode 1861. 旋转盒子|Go 双指针解法

j >= 0,如果写成j>0,会漏掉第 0 列,最左侧石头处理失败旋转矩阵行列互换:原 m 行 n 列 → 结果 n 行 m 列,make 数组长度不要写反旋转公式m-1-i:是原总行数 m,不是 n!很容易写成n-1-i区分:本题和轮转数组(189)分组循环不一样!189:所有元素固定移动 k 步,需要 gcd 分组1861:障碍物分割成多个独立段,石头向段末尾挤,用双指针更合适。

2503_92676540的博客 175

Hash表:两数之和、字母异位词分组、最长连续序列 [力扣 Hot100]

三道高频哈希表应用题:两数之和(利用HashMap快速查找补数)、字母异位词分组(排序后作为键分组)、最长连续序列(通过HashSet去重并仅从序列起点扩展)。核心思想均为借助哈希结构优化查找效率,避免重复计算。同时提及双指针等其他解法思路,体现算法设计中“空间换时间”的典型策略。

2403_87560480的博客 195

LeetCode 3926. 统计有效单词的出现次数【分组循环】

核心思想:用分组循环,一趟遍历字符串,把一个个单词切出来,丢进哈希表统计频次。,先把所有片段拼接成完整文本字符串。,依次返回每个单词在文本里的出现次数。难点:内层循环的判断条件,区分。

2503_92676540的博客 166

力扣第526场周赛心得理解

思路:因为题目要求尽可能求出最小的最大值,而满足要求最小公约数为2,作为题目要求最小的最大值,先去求出它的最大公约数再通过value判断最左边是否大于0,以及value本身是否大于0,而index的位置只能为中间或者最右边,所以最后输出只能是value本身或者在这个基础上加相隔相应距离次数的结果。两个整数,是指将第二个整数的所有十进制数位拼接在第一个整数的所有十进制数位之后。如果不存在这样的数组,返回 -1。4097. 合并整数后的最小值。返回所有合并后得到的整数中的。合并,依此类推,直到将。

目前主攻编程,目标是把屏幕上的红波浪线变成流畅运行的程序♪(^∀^●)ノシ 198

LeetCode 0453.最小操作次数使数组元素相等:两次遍历(反向思维)

【LetMeFly】453.最小操作次数使数组元素相等:两次遍历(反向思维)

<font color="Pink">Tisfy的博客</font> 202

【算法学习笔记】LeetCode 15:三数之和(排序 + 双指针)

使用sort()对数组进行排序。理解排序后双指针的移动原理。使用外层循环固定一个数字。使用左右指针寻找另外两个数字。使用continue和while实现去重。理解的执行逻辑。将三层循环优化为排序 + 双指针,使时间复杂度从 O(n³) 降低到 O(n²)。

aqiu111111的博客 156

LeetCode100 15. 三数之和

本题通过排序+双指针优化三数之和。先对数组排序,外层遍历固定第一个数,内层用左右指针查找另两个数,使三数之和为0。通过剪枝(当前数>0则终止)和去重(跳过重复元素)提升效率。相比暴力或哈希法,该方法时间复杂度为O(n²),空间O(1),更高效优雅。

Shaoxingzong的博客 321
上一篇: 力扣第452场周赛
下一篇: AtCoder Beginner Contest 412
一只鱼^_
博客等级 码龄3年 1073粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值