力扣第206场周赛

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

 周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台​​​​​​

1. 二进制矩阵中的特殊位置

给定一个 m x n 的二进制矩阵 mat,返回矩阵 mat 中特殊位置的数量。

如果位置 (i, j) 满足 mat[i][j] == 1 并且行 i 与列 j 中的所有其他元素都是 0(行和列的下标从 0 开始计数),那么它被称为 特殊 位置。

输入:mat = [[1,0,0],[0,0,1],[1,0,0]]
输出:1
解释:位置 (1, 2) 是一个特殊位置,因为 mat[1][2] == 1 且第 1 行和第 2 列的其他所有元素都是 0。
输入:mat = [[1,0,0],[0,1,0],[0,0,1]]
输出:3
解释:位置 (0, 0),(1, 1) 和 (2, 2) 都是特殊位置。

提示:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 100
  • mat[i][j] 是 0 或 1。

数据范围很小, 直接简单模拟, 定位到(i,j), 累加第i行和第j列的和是否为0

class Solution {
public:
    int m,n;
    int judge(int i,int j,vector<vector<int>>& mat){
        int row=0,col=0;
        for(int a=0;a<n;a++){
            row+=mat[i][a];
        }
        for(int b=0;b<m;b++){
            col+=mat[b][j];
        }
        if(row+col==2){
            return 1;
        }
        return 0;
    }
    int numSpecial(vector<vector<int>>& mat) {
        int ct=0; m=mat.size(); n=mat[0].size();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(mat[i][j]==1){
                    ct+=judge(i,j,mat);
                }
            }
        }
        return ct;
    }
};

2. 统计不开心的朋友 

给你一份 n 位朋友的亲近程度列表,其中 n 总是 偶数 。

对每位朋友 i,preferences[i] 包含一份 按亲近程度从高到低排列 的朋友列表。换句话说,排在列表前面的朋友与 i 的亲近程度比排在列表后面的朋友更高。每个列表中的朋友均以 0 到 n-1 之间的整数表示。

所有的朋友被分成几对,配对情况以列表 pairs 给出,其中 pairs[i] = [xi, yi] 表示 xi 与 yi 配对,且 yi 与 xi 配对。

但是,这样的配对情况可能会使其中部分朋友感到不开心。在 x 与 y 配对且 u 与 v 配对的情况下,如果同时满足下述两个条件,x 就会不开心:

  • x 与 u 的亲近程度胜过 x 与 y,且
  • u 与 x 的亲近程度胜过 u 与 v

返回 不开心的朋友的数目 。

示例 1:

输入:n = 4, preferences = [[1, 2, 3], [3, 2, 0], [3, 1, 0], [1, 2, 0]], pairs = [[0, 1], [2, 3]]
输出:2
解释:
朋友 1 不开心,因为:
- 1 与 0 配对,但 1 与 3 的亲近程度比 1 与 0 高,且
- 3 与 1 的亲近程度比 3 与 2 高。
朋友 3 不开心,因为:
- 3 与 2 配对,但 3 与 1 的亲近程度比 3 与 2 高,且
- 1 与 3 的亲近程度比 1 与 0 高。
朋友 0 和 2 都是开心的。

示例 2:

输入:n = 2, preferences = [[1], [0]], pairs = [[1, 0]]
输出:0
解释:朋友 0 和 1 都开心。

示例 3:

输入:n = 4, preferences = [[1, 3, 2], [2, 3, 0], [1, 3, 0], [0, 2, 1]], pairs = [[1, 3], [0, 2]]
输出:4

提示:

  • 2 <= n <= 500
  • n 是偶数
  • preferences.length == n
  • preferences[i].length == n - 1
  • 0 <= preferences[i][j] <= n - 1
  • preferences[i] 不包含 i
  • preferences[i] 中的所有值都是独一无二的
  • pairs.length == n/2
  • pairs[i].length == 2
  • xi != yi
  • 0 <= xi, yi <= n - 1
  • 每位朋友都 恰好 被包含在一对中

解题思路:根据题意我们知道, (i,j),(u,v), i与u的比i与j更亲近, u与i比u与v更亲近, 此时i就会不开心, pairs数组提供了配对, 我们要判断在这种配对下, 是否存在有人不开心。 代码实现上, 遍历preferences, 对preferences[i]中的按亲近程度分别用0,1,2...进行标记(数字越小越亲近)。然后遍历判断即可

class Solution {
public:
    int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) {
        vector<vector<int>> a(n,vector<int>(n,0));
        for(int i=0;i<n;i++){
            for(int j=0;j<n-1;j++){
                a[i][preferences[i][j]]=j;
            }
        }
        //(i,j),(u,v), i与u的比i与j更亲近, u与i比u与v更亲近
        vector<int> b(n,0);
        for(int i=0;i<pairs.size();i++){
            b[pairs[i][0]]=pairs[i][1]; b[pairs[i][1]]=pairs[i][0];
        }
        int ans=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                // if(i!=j&&b[i]!=j){
                if(i!=j){
                    int curI=b[i];
                    int curJ=b[j];
                    if(a[i][j]<a[i][curI]&&a[j][i]<a[j][curJ]){
                        ans++;
                        break;
                    }
                // }
                }
            }
        }
        return ans;
    }
};

3. 连接所有点的最小费用 

给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。

连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。

请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。

示例1: 

输入:points = [[0,0],[2,2],[3,10],[5,2],[7,0]]

输出:20

示例2: 

输入:points = [[3,12],[-2,5],[-4,1]]

输出:18

提示:

  • 1 <= points.length <= 1000
  • -106 <= xi, yi <= 106
  • 所有点 (xi, yi) 两两不同。

解题思路: 题目就是让你构建一个最小生成树,返回最小总费用。构建最小生成树, 我们可以使用Prim 算法,   时间复杂度为O(n^2)

简单解释一下, Prim算法是图论中在构建最小生成树时用到的方法

Prim 算法
设N={V,E} 是连通网, TE是N上最小生成树中边的集合        {a,b} a 代表点, b代表边 -> 属于
1. 初始令U={u0},{u0->V},TE={ }
2. 在所有u->U, v->V-U的边(u,v)->E中,找一条代价最小的边(u0,v0). 注: 就是权值最小的边
3. 将(u0,v0) 这条边并入集合 TE, 同时 v0这个点并入U
4. 重复上述操作直至U=V为止, 则T=(V,TE) 为N 的最小生成树  (意思就是把所有的点都选进集合U, 所以前面写的是U=V)

通俗解释:在U集合中选一个点和在U-V集合中选一个点, 使得这个权值的最小, 然后把弧上的顶点加入到集合U中, 直到U=T集合,得到的连通图就是最小生成树,前提是不能成环

class Solution {
    struct Close {
        int date;
        int wed;
    };
public:
    void Prim(vector<vector<int>>& graph, int v, vector<Close>& clos, int& totalCost) {
        int n = graph.size();
        for (int i = 0; i < n; i++) {
            clos[i].date = v;
            clos[i].wed = graph[v][i];
        }
        clos[v].wed = 0;
        for (int i = 1; i < n; i++) {
            int k = -1;
            int minW = INT_MAX;
            for (int j = 0; j < n; j++) {
                if (clos[j].wed != 0 && clos[j].wed < minW) {
                    minW = clos[j].wed;
                    k = j;
                }
            }
            //if (k == -1) break; // 图不连通
            totalCost += clos[k].wed;
            clos[k].wed = 0;
            for (int j = 0; j < n; j++) {
                if (graph[k][j] < clos[j].wed) {
                    clos[j].date = k;
                    clos[j].wed = graph[k][j];
                }
            }
        }
    }

    int minCostConnectPoints(vector<vector<int>>& points) {
        int n = points.size();
        vector<vector<int>> graph(n, vector<int>(n, INT_MAX)); //构建邻接矩阵
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int w = abs(points[i][0] - points[j][0]) + abs(points[i][1] - points[j][1]);
                graph[i][j] = w;
                graph[j][i] = w;
            }
        }
        vector<Close> clos(n);
        int totalCost = 0;
        Prim(graph, 0, clos, totalCost);
        return totalCost;
    }
};

//points[i]=[Xi,Yi] 表示一个坐标
//连接点 [xi, yi] 和点 [xj, yj] 的费用为|xi - xj| + |yi - yj|
//返回构建最小生成树所需要的最小费用

4.检查字符串是否可以通过排序子字符串得到另一个字符串 

 给你两个字符串 s 和 t ,请你通过若干次以下操作将字符串 s 转化成字符串 t :

  • 选择 s 中一个 非空 子字符串并将它包含的字符就地 升序 排序。

比方说,对下划线所示的子字符串进行操作可以由 "14234" 得到 "12344" 。

如果可以将字符串 s 变成 t ,返回 true 。否则,返回 false 。

一个 子字符串 定义为一个字符串中连续的若干字符。

示例 1:

输入:s = "84532", t = "34852"
输出:true
解释:你可以按以下操作将 s 转变为 t :
"84532" (从下标 2 到下标 3)-> "84352"
"84352" (从下标 0 到下标 2) -> "34852"

示例 2:

输入:s = "34521", t = "23415"
输出:true
解释:你可以按以下操作将 s 转变为 t :
"34521" -> "23451"
"23451" -> "23415"

示例 3:

输入:s = "12345", t = "12435"
输出:false

示例 4:

输入:s = "1", t = "2"
输出:false

提示:

  • s.length == t.length
  • 1 <= s.length <= 105
  • s 和 t 都只包含数字字符,即 '0' 到 '9' 。

解题思路: 看示例3, 34 是不能通过排序得到43的,本题是一个贪心, 在实现上我们用一个前缀数组perfix去维护前j个元素中各个字符['0'-'9']出现的次数, 然后依次取出t中的各个字符, 对应到s中, 如果 S 中某个字符 c 前面有比 c(t中) 小的字符尚未被处理,则无法通过排序操作得到 t 

// s = "84532", t = "34852"
s = "12345", t = "12435"
//t中某个字符t[i], 在s中的位置pos,  前面有字符c没有被处理(cnt_current[c]==0),    
//如果 S 中某个字符 c 前面有比 c 小的字符尚未被处理,则无法通过排序操作得到 t    
class Solution {
public:
    bool isTransformable(string s, string t) {
        int n = s.size();
        vector<int> cnt_s(10, 0), cnt_t(10, 0); //统计每个字符出现的频率
        for (char c : s) cnt_s[c - '0']++;
        for (char c : t) cnt_t[c - '0']++;
        if (cnt_s != cnt_t) return false;      //没有继续判断的必要了
        
        vector<vector<int>> prefix(n + 1, vector<int>(10, 0));  //统计任意前 j 个字符中各字符的出现次数
        //prefix[i+1][d]/prefix[i][d]
        for (int i = 0; i < n; i++) {
            int c = s[i] - '0';
            for (int d = 0; d < 10; d++) {
                prefix[i + 1][d] = prefix[i][d];
            }
            prefix[i + 1][c]++;
        }
        
        vector<queue<int>> pos(10); //每个字符维护一个队列, 记录(每个字符)在s中出现的位置
        for (int i = 0; i < n; i++) {
            int c = s[i] - '0';
            pos[c].push(i);
        }
        
        vector<int> cnt_current(10, 0);
        for (int i = 0; i < n; i++) {
            int c = t[i] - '0';
            if (pos[c].empty()) return false;
            int j = pos[c].front();   //对于 t 中的每个字符 c,从 pos[c] 中取出它在 s 中的最早出现位置 j
            pos[c].pop();
            
            for (int d = 0; d < c; d++) {
                if (prefix[j][d] > cnt_current[d]) {
                    return false;
                }
            }
            
            cnt_current[c]++;
        }
        return true;
    }
};

对比现在的周赛, 题目的难度确实提升了不少,  对题目/代码有疑问, 可以发布到评论区, 感谢!

LeetCode高效刷题指南:从算法基础到面试实战的完整路径 算法与数据结构是计算机科学的核心基础,其原理在于通过特定的数据组织和计算逻辑,高效地解决复杂问题。掌握它们的技术价值在于能显著提升开发者的计算思维和问题拆解能力,这是应对大型系统设计、性能优化及通过技术面试的关键。在实际应用场景中,无论是构建高并发服务、实现推荐系统,还是进行大数据处理,扎实的算法功底都不可或缺。本文聚焦于**动态规划**和**深度优先搜索**这两大核心武器,系统阐述如何通过专题化学习和科学的“三刷”练习法,将零散的题目内化为稳固的知识体系,从而在LeetCode训练和真实面试中游刃有余。 阅读详情

相关推荐

LeetCode高效刷题全攻略:从环境搭建到实战模板的系统方法论

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

weixin_34115824的博客 406

LeetCode - 第206场周赛

Rank A. 二进制矩阵中的特殊位置 暴力求解. class Solution { public: int numSpecial(vector<vector<int>>& mat) { int n=mat.size(); int m=mat[0].size(); int ans=0; for(int i=0;i<n;++i){ for(int j=0;j<m;++j

XiaoK's Blog 183

从零搭建PIC MCU开发环境:MPLAB IDE与HI-TECH编译器安装破解全攻略

本文详细介绍了从零搭建PIC MCU开发环境的完整流程,包括MPLAB IDE 8.85的安装配置、HI-TECH C编译器的安装与破解,以及PICkit3编程器的使用技巧。通过清晰的步骤说明和常见问题解决方案,帮助开发者快速搭建稳定的PIC单片机开发环境,适用于PIC16/18系列MCU开发。

weixin_29188997的博客 291

Leetcode 第 206 场周赛

二进制矩阵中的特殊位置 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 。 特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0(行和列的下标均 从 0 开始 ),则位置 (i, j) 被称为特殊位置。 class Solution { public: bool check(vector<vector<int>>& mat,i.

tomjobs的博客 326

联邦学习代码解读,超详细

联邦学习伪代码 损失函数使用方法 1 optimizer = optim.Adam(model.parameters()) 2 fot epoch in range(num_epoches): 3 train_loss=0 4 for step,(seq, label) in enumerate(data_loader): 5 # 损失函数 6 loss = criterion(model(seq), label.to(device)

weixin_42098322的博客 1万+

手把手教你用EG2153搭建开关电源:SOP-8封装驱动芯片的5个设计技巧

本文详细介绍了使用EG2153自振荡半桥驱动芯片搭建开关电源的五个核心设计技巧。内容涵盖从深入理解芯片工作机制、频率编程计算误区、SOP-8封装的热管理方案,到死区时间评估与外部保护电路设计,以及实战调试与故障排查指南,旨在帮助工程师实现稳定可靠的小功率电源设计。

weixin_29200485的博客 376

LeetCode 第206场周赛 题解

文章目录a.二进制矩阵中的特殊位置a.题目a.分析a.参考代码b.统计不开心的朋友b.题目b.分析b.参考代码c.连接所有点的最小费用c.题目c.分析c.参考代码d.检查字符串是否可以通过排序子字符串得到另一个字符串d.题目d.分析d.参考代码 a.二进制矩阵中的特殊位置 a.题目 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 。 特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j

夢裡夢到醒不來的夢 830

科研ABC - The Results Section(SCI论文写作补充)

1 前言 1.1 IMRD格式 1.2 Results部分意义 1.3 Results部分主要内容 2 Results & Discussion关系 2.1 Results & Discussion部分的搭配方式 2.2 Results & Discussion部分的区分 3 Results部分的结构 3.1 Move 1: Set the Stage 3.1....

洋洋洋2020的blog 1615

LeetCode第206场周赛(2020/09/13)

1. 二进制矩阵中的特殊位置 代码 class Solution { public: int numSpecial(vector<vector<int>>& mat) { int N = mat.size(); int M = mat[0].size(); vector<int> sumi(N); vector<int> sumj(M); for(int i=0

ChasingTheFreeWind 207

华为OD面试八股真题 - 操作系统 - 1

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 1631

如何使用Python爬取并保存网页上的所有附件

爬虫(Crawler)是一种自动化程序,它通过模拟人工访问网页并下载网页上的数据或文件,常用于数据采集和分析。爬虫通常以“爬取”的形式自动浏览和提取网页中的各种信息。本文详细介绍了如何使用Python爬取并保存网页中的附件文件,涵盖了网页解析、文件下载、多线程与异步优化等内容。希望通过本文的讲解,能够帮助你理解并掌握附件爬取的技巧。在实际应用中,爬虫开发不仅需要解决技术问题,还要遵守网络道德和法律法规,避免不当使用爬虫造成负面影响。

2201_76125261的博客 965

[Leetcode/c++] 第206场周赛

P1 二进制矩阵中的特殊位置 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 。 特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0(行和列的下标均 从 0 开始 ),则位置 (i, j) 被称为特殊位置。 暴力 #include <bits/stdc++.h> #include <unordered_map> #include <uno

其实我是一个艺术家 386

在 Visual Studio Code 中开发 SAP Fiori 应用并部署到 Cloud Foundry 的完整实战指南

摘要:本文介绍如何以ABAP RAP服务为后端,通过VS Code和SAP Fiori工具将Fiori应用一键部署到SAP BTP Cloud Foundry环境。主要内容包括:1) 开发环境配置(VS Code+Fiori工具);2) 架构流程说明(MTA打包、Approuter路由);3) 权限准备(业务Catalog分配);4) 创建带Approuter的MTA项目;5) 连接ABAP OData服务并生成Fiori应用。文中还针对常见问题(如服务不可见、部署失败)提供了解决方案参考。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 361

LeetCode 第 206 场周赛(733/4491,前16.3%)

文章目录1. 比赛结果2. 题目1. LeetCode 5511. 二进制矩阵中的特殊位置 easy2. LeetCode 5512. 统计不开心的朋友 medium3. LeetCode 5513. 连接所有点的最小费用 medium4. LeetCode 5514. 检查字符串是否可以通过排序子字符串得到另一个字符串 hard 1. 比赛结果 做出来3题。继续加油! 全国排名: 733 / 4491,16.3%;全球排名: 0 / 1,00.0% 2. 题目 1. LeetCode 5511. 二进制

Michael是个半路程序员 2359

彻底解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

renkai721的专栏 24万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode206场周赛第二题--早餐组合整理

这是我第二次刷力扣,又是只做了一道题23333,加油吧,一点一点积累、一点一点进步! 题目描述: 小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。 注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1 示例 1: 输入:staple = [10,20,5], dri

我叫鱿鱼须的博客 684

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LeetCode 第 206 场周赛 (统计、暴力、最小生成树、冒泡+贪心)

5511. 二进制矩阵中的特殊位置 class Solution { public: int numSpecial(vector<vector<int>>& g) { int ans = 0, m = g.size(), n = g[0].size(); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ int cnt = 0;

SongyangJi 166

老版QQ原生表情gif动态

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

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【Leetcode】Weekly 206 检查字符串是否可以通过排序子字符串得到另一个字符串

Leetcode Weekly 206 检查字符串是否可以通过排序子字符串得到另一个字符串 给你两个字符串 s 和 t ,请你通过若干次以下操作将字符串 s 转化成字符串 t : 选择 s 中一个 非空 子字符串并将它包含的字符就地 升序 排序。 比方说,对下划线所示的子字符串进行操作可以由 “14234” 得到 “12344” 。如果可以将字符串 s 变成 t ,返回 true 。否则,返回 false 。一个 子字符串 定义为一个字符串中连续的若干字符。 示例1: 输入:s = "84532", t

u014156276的博客 398

开一篇blog记录自己的周赛

开一篇blog记录自己的周赛 2020-07-05第196场周赛 第一次参赛 AC了1.2题 1407/5506 废物 2020-07-11第30场双周赛 AC了1.2.3题 第4题有点思路但没想到dp 875/2545 比fw好一点了 2020-07-12第197场周赛 AC了1.2题 3.4题代码写出来了但是有几个例子过不了(9/16和50/55) 好起来了 再接再厉 ...

qq_41027795的博客 236

力扣刷题全攻略:从数据结构到面试实战

算法与数据结构是程序员的核心竞争力,通过系统化的刷题训练可以有效提升问题解决能力。哈希表、动态规划等经典算法采用空间换时间策略优化性能,在数据处理、系统设计等场景有广泛应用。力扣(LeetCode)作为技术面试的黄金标准,其热题100涵盖数组、链表等基础数据结构到复杂系统设计。掌握五步解题法和模式识别技巧,配合3+2+1刷题节奏,既能巩固基础知识又能突破算法瓶颈。本文特别详解两数之和等高频面试题,分享从调试技巧到效率优化的实战经验,帮助开发者建立完整的算法思维体系。

weixin_30703911的博客 384

20211118:力扣第267周周赛(上)

力扣第267周周赛(上)题目思路与算法代码实现写在最后 题目 买票需要的时间 反转偶数长度组的节点 思路与算法 买票需要的时间 处理思路:直接进行模拟即可,找到位置k上的人需要买的票的数量,排在他之前的人至少要买跟他同样数量的票,排在他后面的人至少需要买比他的票少一张的数量。注意后者不要搞错就可以解决这道题了。 反转偶数长度组的节点 这道题容易出问题的点在于如果最后剩余的节点数量为偶数,那么不管前面这一组节点是否为偶数,最后一组都要进行翻转,在206题翻转链表的基础上做

Mr IMMUNIZE的博客 571

日刷leetcode(第一周)

日刷leetcode(第一周) 2020.03.10 ~ 2020.03.16 本周共刷精选 TOP 面试题 31道题目

the_harder_to_love的博客 252

链表基础与LeetCode经典题目解析

链表是数据结构中的核心概念,通过指针将零散的内存块串联起来,具有插入删除操作O(1)时间复杂度的优势。理解链表的基本操作如插入、删除、反转等,是算法学习的重要基础。本文通过LeetCode经典题目203.移除链表元素、707.设计链表和206.反转链表,深入解析链表的核心操作要点和高级技巧,如虚拟头节点、快慢指针等。这些题目不仅是面试高频考点,也是提升编程思维和算法能力的有效途径。掌握链表操作对于解决实际工程问题如内存管理、文件系统等具有重要意义。

ithome 490

Leetcode 刷题目录

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

GoldenaArcher的博客 874

LeetCode面试经典150题:算法与数据结构精要解析

算法与数据结构是程序员面试的核心考察点,LeetCode经典150题通过系统性的题目设计,覆盖了从基础数据结构到高级算法思想的完整知识体系。哈希表、动态规划等关键技术在实际工程中广泛应用,例如哈希表可以实现O(1)时间复杂度的快速查找,动态规划则能有效解决最优化问题。掌握这些核心算法不仅能提升代码效率,更能培养工程化的解题思维。本文以面试高频考点为切入点,深入解析LeetCode经典150题中的解题范式与优化技巧,帮助开发者构建完整的算法知识体系,从容应对技术面试挑战。

weixin_30527323的博客 420

Leetcode Hot100:算法面试通关秘籍与高效刷题指南

数据结构与算法是程序员面试的核心考察点,其中动态规划和哈希表优化等关键技术常出现在大厂面试中。通过系统性地掌握这些基础算法原理,开发者可以显著提升解题效率。Leetcode Hot100作为经典题库,精选了100道覆盖数组、链表、二叉树等高频考点的高质量题目,能帮助求职者建立完整的算法思维框架。在实际应用中,如处理两数之和等哈希表问题时,掌握空间复杂度优化技巧尤为关键。本文通过三遍刷题法等实战方法论,结合调试技巧和复杂度分析,为开发者提供从入门到精通的系统训练路径。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值