前缀和题型总结 I: leetcode 467、795、904、992、1109

zynq+ad9361 petalinux使用官方IIO示波器调试记录 1ad9361 iio示波器 阅读详情

一般处理的时候要求连续,或者求连续子序列等问题都可以想一下前缀和是否可以解决

leetcode 467:环绕字符串中唯一的子字符串

题目描述:
把字符串 s 看作 “abcdefghijklmnopqrstuvwxyz” 的无限环绕字符串,所以 s 看起来是这样的:“…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…” 。现在给定另一个字符串 p 。返回 s 中 不同 的 p 的 非空子串 的数量 。
示例1:
输入:p = “a”
输出:1
解释:字符串 s 中只有 p 的一个 “a” 子字符。

示例 2:
输入:p = “cac”
输出:2
解释:字符串 s 中只有 p 的两个子串 (“a”, “c”) 。

示例 3:
输入:p = “zab”
输出:6
解释:在字符串 s 中有 p 的六个子串 (“z”, “a”, “b”, “za”, “ab”, “zab”) 。

提示:
1 <= p.length <= 10^5
p 由小写英文字母组成

思路1: 动态规划DP

class Solution:
    def findSubstringInWraproundString(self, p: str) -> int:
        # 定义状态为 以i结尾的字符串的数量
        dp = [0 for _ in range(len(p))]
        dp[0] = 1
        map = {}
        map[p[0]] = 1
        self.res = 0
        for i in range(1, len(p)):
            if self.close(p[i-1], p[i]):
                dp[i] = 1 + dp[i-1]
            else:
                dp[i] = 1
            if p[i] in map:
                if map[p[i]] < dp[i]:
                    map[p[i]] = dp[i]
            else:
                map[p[i]] = dp[i]
        for key in map:
            self.res += map[key]
        return self.res

    def close(self, x, y):
        if ord(y) - ord(x) == 1:
            return True
        if x == 'z' and y == 'a':
            return True

这里需要注意使用一个map进行了去重处理,比如"cac"示例,c不能被计算成为两个。
思路2: 前缀和
由题干即求连续子字符串的数量,只不过在连续的时候需要保证是字母挨着的满足要求,可以由笔记上的母题推的本题利用前缀和解决的方式:

class Solution:
    def findSubstringInWraproundString(self, p: str) -> int:
        dict_char = dict()
        pre = 1
        dict_char[p[0]] = pre
        for i in range(1, len(p)):
            if ord(p[i]) - ord(p[i-1]) == 1 or ord(p[i])-ord(p[i-1]) == -25:
                pre += 1
            else:
                pre = 1
            if p[i] in dict_char:
                dict_char[p[i]] = max(dict_char.get(p[i]), pre)
            else:
                dict_char[p[i]] = pre
        ans = 0
        for k in dict_char:
            ans += dict_char[k]
        return ans

对于这类的前缀和,需要注意的就是pre的求取,正常只是求连续的子序列的话就是:

pre += 1
ans += pre

有特殊需求的时候,对pre要进行一些处理。

leetcode 795:区间子数组个数

题目描述:
给你一个整数数组 nums 和两个整数:left 及 right 。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数。
生成的测试用例保证结果符合 32-bit 整数范围。

示例 1:
输入:nums = [2,1,4,3], left = 2, right = 3
输出:3
解释:满足条件的三个子数组:[2], [2, 1], [3]

示例 2:
输入:nums = [2,9,2,5,6], left = 2, right = 8
输出:7

提示:
1 <= nums.length <= 105
0 <= nums[i] <= 109
0 <= left <= right <= 109

思路: 前缀和
和前缀和的母题其中一个很相似,就是求not greater[right] 和 not greater[left-1]之间的差就是满足要求的连续子序列。

class Solution:
    def numSubarrayBoundedMax(self, nums: List[int], left: int, right: int) -> int:
        def notgreater(k):
            pre, ans = 0, 0
            for i in range(len(nums)):
                if nums[i] <= k:
                    pre += 1
                else:
                    pre = 0
                ans += pre
            return ans
        
        return notgreater(right)-notgreater(left-1)

leetcode 904: 水果成篮

你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。
你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。

示例 1:
输入:fruits = [1,2,1]
输出:3
解释:可以采摘全部 3 棵树。

示例 2:
输入:fruits = [0,1,2,2]
输出:3
解释:可以采摘 [1,2,2] 这三棵树。
如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。

示例 3:
输入:fruits = [1,2,3,2,2]
输出:4
解释:可以采摘 [2,3,2,2] 这四棵树。
如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。

示例 4:
输入:fruits = [3,3,3,1,2,1,1,2,3,3,4]
输出:5
解释:可以采摘 [1,2,1,1,2] 这五棵树。

提示:
1 <= fruits.length <= 10^5
0 <= fruits[i] < fruits.length

思路: 前缀和
本题的意思即是求在数组中连续的两个不同数出现的总次数和。
因为要连续所以想到尝试利用前缀和解决。
遍历一遍数组输出最长的只有两种元素的区间,从头开始往后走,记录已经收集的元素种类,一旦超过两个,前面的指针向后移动直到恢复到两个为止。

class Solution:
    def totalFruit(self, fruits: List[int]) -> int:
        k, ans = 2, 0
        dict_fruit = dict()
        i, j = 0, 0
        for j in range(len(fruits)):
            if fruits[j] not in dict_fruit or dict_fruit[fruits[j]] == 0:
                dict_fruit[fruits[j]] = 0
                k -= 1
            dict_fruit[fruits[j]] += 1
            while k < 0:
                dict_fruit[fruits[i]] -= 1
                if dict_fruit[fruits[i]] == 0:
                    k += 1
                i += 1
            ans = max(ans, j-i+1)
        return ans

leetcode 992:K个不同整数的子数组

题目描述:
给定一个正整数数组 nums和一个整数 k ,返回 num 中 「好子数组」 的数目。

如果 nums 的某个子数组中不同整数的个数恰好为 k,则称 nums 的这个**连续、**不一定不同的子数组为 「好子数组 」。

例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。
子数组 是数组的 连续 部分。

示例 1:
输入:nums = [1,2,1,2,3], k = 2
输出:7
解释:恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2].

示例 2:
输入:nums = [1,2,1,3,4], k = 3
输出:3
解释:恰好由 3 个不同整数组成的子数组:[1,2,1,3], [2,1,3], [1,3,4].

提示:
1 <= nums.length <= 2 * 104
1 <= nums[i], k <= nums.length

思路: 前缀和
这题和上一套水果的问题是很相似的,只不过是要求数量为k,并且所求是子数组的数量,不是长度;因为题目中提到了是要连续的要求,而且是求子序列的个数,所以想到了用前缀和;因为要求恰好是K个不同数的子序列数量,可以转换为求not greater(k) - not greater(k-1)。

class Solution:
    def subarraysWithKDistinct(self, nums: List[int], k: int) -> int:
        def atMost(k):
            ans, i, pre = 0, 0, 0
            dict_num = dict()
            for j in range(len(nums)):
                if nums[j] not in dict_num or dict_num[nums[j]] == 0:
                    k -= 1
                    dict_num[nums[j]] = 0
                dict_num[nums[j]] += 1
                while k < 0:
                    dict_num[nums[i]] -= 1
                    if dict_num[nums[i]] == 0:
                        k += 1
                    i += 1
                ans += j - i + 1  # 注意这里的计算方式,相当于在以i开头的数组求连续子序列时以j结尾的子序列个数
            return ans

        return atMost(k)-atMost(k-1)

leetcode 1109:航班预计统计

题目描述:
这里有 n 个航班,它们分别从 1 到 n 进行编号。
有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [first_i, last_i, seats_i] 意味着在从 first_i 到 last_i (包含 first_i 和 last_i )的 每个航班 上预订了 seats_i 个座位。

请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。

示例 1:
输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
输出:[10,55,45,25,25]
解释:
航班编号 1 2 3 4 5
预订记录 1 : 10 10
预订记录 2 : 20 20
预订记录 3 : 25 25 25 25
总座位数: 10 55 45 25 25
因此,answer = [10,55,45,25,25]

示例 2:
输入:bookings = [[1,2,10],[2,2,15]], n = 2
输出:[10,25]
解释:
航班编号 1 2
预订记录 1 : 10 10
预订记录 2 : 15
总座位数: 10 25
因此,answer = [10,25]

提示:
1 <= n <= 2 * 10^4
1 <= bookings.length <= 2 * 10^4
bookings[i].length == 3
1 <= first_i <= last_i <= n
1 <= seatsi <= 10^4

思路: 前缀和
[i, j, k] 其实代表的是 第 i 站上来了 k 个⼈, ⼀直到 第 j 站都在⻜机上,
到第 j + 1 就不在⻜机上了。所以第 i 站到第 j 站的每⼀站都会因此多 k 个
⼈。
因为题目中数组长度的限制,需要保证在O(n)的时间复杂度完成任务;考虑到相当于在i后的每个数都要加k,但是是到 j 为止,所以可以理解为 j 后面需要在加上 k 之后再减去k;所以一个做法就是利用前缀和,在i处值为k,j + 1处为-k;这样所求就是当前位置的前缀和,即一共在当前位置上来了多少个人。

class Solution:
    def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
        count = [0] * n
        for i, j, k in bookings:
            count[i-1] += k
            if j < n:
                count[j] -= k
        for a in range(1, n):
            count[a] += count[a-1]
        return count

理解成上下车会容易理解一点,画一个示意图就能更好的理解解法。

NVIDIA Isaac Sim 入门教程(二) Omniverse Isaac Sim 的工作空间非常容易自定义。调整用户界面的大小、停靠、取消停靠、添加和移除面板都非常容易。进入顶部菜单栏,单击下拉菜单最下方的窗口 > 视口 > 视口 2(现在工作区中应该会出现一个名为 "视口 2 "的新视口。如果您想创建更多的视口,请按照相机检查器扩展进行操作。单击并拖动视口 2 的顶部标题以激活停靠部件。拖放到原始视口的右侧,将两个视口并排放置。单击并向左拖动视口 2 的左侧,使视口大小相等。 阅读详情

相关推荐

彻底卸载Ubuntu双系统,并完美回收100G空间给D盘

本文记录了安全卸载Ubuntu双系统并回收磁盘空间的全过程。作者首先通过Windows命令行彻底清除Ubuntu启动项,避免GRUB引导报错;随后在磁盘管理中删除Linux分区,将100G未分配空间合并至相邻的D盘。针对C盘空间不足问题,作者采用Dism++清理系统文件,并将用户文档、聊天记录等迁移至扩容后的D盘。最终实现了引导纯净、空间合理分配的目标,特别强调分区扩展必须遵循"相邻原则",建议通过间接迁移而非直接扩容来优化系统盘空间管理。

2403_85993278的博客 1512

Leetcode 1392:最长快乐前缀(超详细的解法!!!)

「快乐前缀」是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。 如果不存在满足题意的前缀,则返回一个空字符串。 示例 1: 输入:s = "level" 输出:"l" 解释:不包括 s 自己,一共有 4 个前缀("l", "le", "lev", "leve")和 4 个后缀("l", "el", "vel", "evel")。...

coordinate的博客 2941

ADS2020与SystemVue2020Update1.0同机安装避坑指南:解决License冲突,实现EVM联合仿真

本文详细介绍了ADS2020与SystemVue2020 Update1.0同机安装的完整解决方案,重点解决License冲突问题,实现EVM联合仿真。通过合理的安装顺序、路径规划和License服务配置,确保两款EDA工具和谐共存,为射频与微波电路设计提供高效仿真环境。

weixin_30271335的博客 348

leetcode 992. K 个不同整数的子数组—(每日一难day12)

滑动窗口总结

weixin_42051691的博客 736

CS231n+assignment2(一)

cs231n作业二详解+代码

qq_56551150的博客 2411

基于Lora的一主多从监测与控制系统

题目:基于Lora的远程农业监测与控制系统 目的:通过Lora子节点采集好各种传感器的信息,发送给汇聚节点,汇聚节点将数据通过ESP8266上传至云端,使用了微信小程序进行监测与控制

热爱生活、奋斗前行 7841

K个不同整数的子数组(纯C)

写力扣遇见的题,思想方法很好,记录一下。 题目: 给定一个正整数数组 nums和一个整数 k,返回 num中 「好子数组」的数目。 如果 nums的某个子数组中不同整数的个数恰好为 k,则称 nums的这个连续、不一定不同的子数组为 「好子数组 」。 例如,[1,2,3,1,2] 中有3个不同的整数:1,2,以及3。 子数组 是数组的 连续 部分。 示例 1: 输入:nums = [1,2,1,2,3], k = 2 输出:7 解释:恰好由 2 个不同整数组成的子数组:[1...

ouliten的博客 867

brpc组件bvar源码解析(一)简介、使用和类的关系

bvar是brpc中的一个重要组件,brpc内部有很多builtin监控都是bvar实现的。 brpc文档介绍bvar“几乎不会给程序增加性能开销,也快于竞争频繁的原子操作”。它的原理是:多线程累加一个计数器时,每个线程只累加私有的变量而不参与全局竞争,因此写时没有锁的竞争;在读取时累加所有线程的私有变量。虽然读比之前慢多了,但写就快多了,因此它使用写多读少的场景,例如统计、监控场景。 1.使用 // bvar::Adder<T>用于累加,下面定义了一个统计read error总数的Adder。

华秋实的专栏 1852

K 个不同整数的子数组

给定一个正整数数组 nums和一个整数 k ,返回 num 中 「好子数组」 的数目。 如果 nums 的某个子数组中不同整数的个数恰好为 k,则称 nums 的这个连续、不一定不同的子数组为 「好子数组 」。 例如,[1,2,3,1,2] 中有3个不同的整数:1,2,以及3。 子数组 是数组的 连续 部分。 输入:nums = [1,2,1,2,3], k = 2 输出:7 解释:恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [...

qq_58818418的博客 321

从门禁到支付:Uniapp+NFC开发避坑指南(支持Mifare Classic)

本文详细介绍了Uniapp结合NFC技术开发门禁与支付系统的实战指南,特别针对Mifare Classic卡片进行深度优化。内容涵盖环境配置、设备兼容性处理、卡片安全机制解析以及高性能读写优化策略,帮助开发者快速实现跨平台的智能硬件交互解决方案。

t1u2v的博客 751

AutoSAR配置与实践(深入篇)5.4 OS原理(下 )- 内存保护(MPU)

ECU可能由内部模块、第三方模块等各模块集成的。需求对每个模块所定义的安全等级可能有差异,需要考虑不同安全等级的模块和代码间减少相互干扰,防止程序错误传播。可以理解为包含Task、Alarm、Counter、Schedule table、ISRs、Event等基本对象的容器,用于隔离Task/Alarm等,进行内存保护。

nihaoljq2010的博客 3536

[BAT][转载]给文件加后缀或者没有后缀文件名加后缀

@echo off setlocal enabledelayedexpansion :这里可以指定添加的后缀名 set hz=txt set batname=%0 echo ================================================================= echo 输入 HY 为还原后缀 echo 否则自动加上txt后缀 echo ...

FL1623863129的博客 1725

从 SOAUTH2 到系统用户,SAP AS ABAP 里配置 OAuth 2.0 Client 的完整落地思路

SAP OAuth 2.0客户端配置的核心在于建立系统级信任关系。在AS ABAP中,每个OAuth 2.0客户端必须关联一个System类型的用户账号(通过SU01创建),并建议采用业务语义明确的命名规范(如ZBTP_PO_APPROVAL_APP)。关键配置包括:客户端认证方式(推荐SSL证书而非共享密钥)、Token生命周期(默认3600秒)、Scope访问范围,以及根据应用场景选择Authorization Code或SAML 2.0 Bearer等授权模式。项目实践中应避免混合配置不同授权类型,而

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

leetcode解题思路分析(一百零六)902 - 908 题

最大为 N 的数字组合 我们有一组排序的数字 D,它是 {‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’} 的非空子集。(请注意,‘0’ 不包括在内。)现在,我们用这些数字进行组合写数字,想用多少次就用多少次。例如 D = {‘1’,‘3’,‘5’},我们可以写出像 ‘13’, ‘551’, ‘1351315’ 这样的数字。返回可以用 D 中的数字写出的小于或等于 N 的正整数的数目。 分情况讨论,小于N位数的情况下随意排列均可,等于N位数则需要从首位数开始逐个考虑。 clas.

ty的博客 2139

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

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

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

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

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站…z站?

给大家分享一波站点,赶快收藏!!! A站:哎哩呲哩 AiliCili弹幕视频网 - 认真你就输啦 (・ω・)ノ- ( ゜- ゜)つロ http://www.ailicili.tv/ B站:哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/ C站:呲哩呲哩 - 最爱ACG (。・ω・)ノ - 你的二次元导航姬 cilicili http://www.cilicili.cc/ D站:嘀哩嘀哩 dilidili https://di

lishuaihao的博客 4万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

leetcode解题思路分析(一百一十八)987 - 993 题

二叉树的垂序遍历 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 从根节点开始,对整棵树进行一次遍历,在遍历的过程中使用数组记录下每个节点的行号,列号 以及值。在遍历完成后,我们按照col 为第一关键字升序,row 为第二关键字升序,value 为第三关键字升序,对所有的节点进行排序即可。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode.

ty的博客 456

深度学习工具包 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 统计优美子数组

题目 统计优美子数组 给你一个整数数组 nums 和一个整数 k。 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。 请返回这个数组中「优美子数组」的数目。 题解 滑动窗口 class Solution { public: int numberOfSubarrays(vector<int>& nums, int k){ int res, left, right, cnt; cnt = left = right

zzh123353的博客 248

LeetCode Cookbook 数组习题(6)

进度有点慢了,必须加快了,做什么事情不能太拖拉了,要不自我感觉什么也干不好了,今天看了一小部分梁晓声的《读书是最对得付出的一件事》,其中讲解了一下雨果的《悲惨世界》中的米里哀主教,我记着我翻开《悲惨世界》时,被其冗杂的景物描写深感无力,现在觉着也能看下去了,不知道为什么,在梁晓声的这本书中我忽然意识到一个问题,‘平凡’确实不是一个贬义词,准确来说它是带有褒义的,因为能说出自己是一个平凡的人的时候,也就意味着自己已经寻觅到自我生命的终点,为什么这么说呢?因为昨天我同母亲进行自己以后到应该做什么?......

weixin_42269028的博客 695

leetcode-杂题

leetcode-面试题56 - I. 数组中数字出现的次数 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1] 示例 2: 输入:nums = [1,2,10,4,1,4,3,3] 输出:[2,10] 或 [10,2] 异或求解: 101011 如果 是两个相同的数,异或后一定为0. 011101 1101

cheerful_man的博客 2484

编程练习6:最大公约数

最大公约数的两种求法。 注意:在给两个数继续值调换的时候一定要注意利用一个中间变量避免调换过程出现问题导致最终结果有错误 /* 求两个数的最大公约数 date:2019/04/29 */ #include<iostream> using namespace std; void gcd1(int a, int b) { int c; if (a > b) { c...

coding_diamond的博客 7315

leetcode 43. 1~n整数中1出现的次数

数学

coding_diamond的博客 1876

leetcode 剑指offer 44:数字序列中的某一位数字

数学

coding_diamond的博客 1827

leetcode 135: 分发糖果

贪心 面试

coding_diamond的博客 1627

leetcode 6043 2251树状数组的应用

题目描述6043: 给你一个二维整数数组 rectangles ,其中 rectangles[i] = [li, hi] 表示第 i 个矩形长为 li 高为 hi 。给你一个二维整数数组 points ,其中 points[j] = [xj, yj] 是坐标为 (xj, yj) 的一个点。 第 i 个矩形的 左下角 在 (0, 0) 处,右上角 在 (li, hi) 。 请你返回一个整数数组 count ,长度为 points.length,其中 count[j]是 包含 第 j 个点的矩形数目。 如果 0

coding_diamond的博客 1318

编程练习3:ASCII码排序

题目: 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。 输入描述: 第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。 输出描述; 对于每组输入数据,输出一行,字符中间用一个空格分开。 代码思路: 本题主要考察的有两个方面: (1)ASCII码大小如何进行比较,经测试,ASCII码大小可以直接根据 ...

coding_diamond的博客 1159

编程练习5:后缀表达式的计算(int上计算器)

要求:将输入的一个中缀表达式转换为后缀表达式进行输出,输出后利用后缀表达式计算式子的结果,将结果进行输出。 思路: 中缀转后缀详见编程练习4 这里处理的时候讲所得到的后缀的结果放置在一个vector中,相比较放在stack中更好的进行取数进行运算 这里需要注意的一点是vector为string类型:原因:以为可能出现229 16这样的数字就不能够每一个符号一个符号的进行判断。 在进行运...

coding_diamond的博客 1130
上一篇: leetcode 5229: 拼接数组的最大分数
下一篇: 前缀和题型总结 II :leetcode 1402、1310、1371、1171
coding_diamond
博客等级 码龄8年 8粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值