自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 LeetCode:474

题目 474. 一和零给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。题解动态规划,01背包问题的变种将问题分解为二维的,以dp[m][n] 表示有m个0和n个1的最大子集的大小,通过遍历数组,对每个字符串的zeroNum和oneNum进行统计,并统计包括当前字符串0,1数目的并且符合0,1数目分别小于m,n条件的各个

2021-02-10 20:57:12 108

原创 LeetCode:300

题目描述:最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。题解:动态规划设f(n)表示长度为n的数组序列中包含第n个数的最长递增子序列,那么f(n)的值为 f(n)=max(f(i)+1),满足nums[i]<nums[n]f(n) = max(f(i)+1),满足nums[i]<nums[n]f(n)

2021-02-09 17:39:12 118

原创 LeetCode:222

题目描述给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。解题思路采用遍历法得到,该方法通用,时间复杂度为O(n)O(n)O(n)利用完全二叉树的性质,若得知其高度h(根节点算0),那么其节点数目为2h+k2^h+k2h+k,最底层的除最左边的节点数量k范围是1−2h1-2^h1−2h。如果我们能得到h,

2020-11-24 21:13:27 86

原创 CentOS7.8 安装chirpstack日志

1.添加EPEL软件包安装源:yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm2,安装mosquitto:yum install mosquitto3.配置mosquitto#创建密码文件touch /etc/mosquitto/pwfile#创建策略文件touch /etc/mosquitto/aclfile#创建日志目录mkdir /var/log/mosquitto#创

2020-11-24 17:27:04 975 1

原创 LeetCode:452

题目描述在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,

2020-11-23 22:35:42 138

原创 LeetCode:127

题目描述对链表进行插入排序解题策略插入排序一般用于数组中,而在链表中,不可以方便的使用标号来确定一个“绝对位置”。仅仅能使用指针来标记一个“相对位置”。因此,我们要采取不一样的策略。按照插入排序的思路,首先,我们将链表分为已排序区、待排序区。然后迭代待排序区,一次次将其中的首位元素插入到已排序区的正确位置上。在链表中,交换元素并不方便,为此,我采取一个策略:即在遍历的时候,当前指针指向待比较节点的父节点,使用父节点来得到下一节点的值,进行比较,这样一来,交换节点的时候就非常方便。在遍历方式上,

2020-11-20 18:58:08 118

原创 自定义的分级输出函数库的实现

目标调试时输出debugf()分级输出:1.errorf()2.infof()3.warnf()4.setLogLevel()1.debugf的实现debugf的作用是这样的:在调试时,我们可以定义一个宏DEBUG,使得可以将插入到代码中的debugf函数有效;而当我们发布程序时,注释掉DEBUG宏,就可以使得代码中的debugf函数失效,并且不会出错。实现方法是利用C语言提供的条件宏定义:#ifdef DEBUG #define debugf __debugf__#

2020-10-10 18:37:07 185

原创 LeetCode刷题系列:链表专题(更新中)

LeetCode19:删除链表的倒数第k个节点题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.解题思路一个简单的思路是,先遍历一遍整个链表,计算有多少个节点;这样就能知道倒数第k个节点是正数第几个。实际上可以实现一次遍历就找到倒数第k个节点的位置,思路如下:我们不知道倒数第k个节点在哪里,但是

2020-09-19 10:11:32 149

原创 LeetCode刷题系列:22

题目描述数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]解题思路这道题只能基于深度优先搜索的方法来进行,问题在于如何优化。给定长度的括号对数,生成的字符串长度是相同的。并且,字符串只能由'('和‘)'组成,所以,进行深度优先遍历的时候每一

2020-09-15 19:17:56 52

原创 LeetCode刷题系列:17

题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。数字和字符串的映射为9键输入法的映射示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].解题思路广度优先遍历法依次得到1个数字,2个数字…的字母组合结果,每次增加一个数字,都在之前的结果基础上增加新的组合深度优先遍历(回溯法)每个数字有多个字母映射,先计算之后所有数字的映射结果,在将当前数字映射的字母组合和之前得到的组合合并产生

2020-09-15 17:10:57 63

原创 LeetCode刷题系列:15

题目描述给你一个包含 n 个整数的数组 nums,判断 nums中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]解题思路简单的做法是三重循环,枚举所有可能的三元组,然后用哈希表去重。但是这样的方法时间复杂度比较高,而且需要额外的空间。

2020-09-14 15:45:27 81

原创 LeetCode刷题系列:12

题目描述罗马数字包含以下七种字符: I, V, X, L,C,D和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II,即为两个并列的 1。12 写做 XII,即为 X + II。 27 写做 XXVII, 即为 XX + V + II。通常情

2020-09-14 09:45:18 48

原创 LeetCode刷题系列:11

题目描述给你n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i, ai)。在坐标内画 n条垂直线,垂直线 i的两个端点分别为(i, ai)和(i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n的值至少为 2。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49解题思路该题目是使用贪心算法解题的一个经典案例。首先,不论如何,我们一开始可以使用最边上的两个垂线作为可能的解,真正的解一定在这两个垂线之间。我们进

2020-09-09 20:40:37 69

原创 LeetCode刷题系列:10

题目描述给你一个字符串 s和一个字符规律 p,请你来实现一个支持'.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从 a-z的小写字母。p可能为空,且只包含从 a-z的小写字母,以及字符 .和 *。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa"p = "

2020-09-09 20:15:37 72

原创 LeetCode刷题系列:8

题目描述请你来实现一个 atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有

2020-09-04 22:33:04 72

原创 LeetCode刷题系列:7

题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21解题思路反转一个整数其实很简单,只需要使用如下操作:res = 0;while(num!=0){ res = res*10+num%10; num/=10;}但是难点在于如何在一个计算结果溢出之前发现它溢出了可以考虑以下:(先假设num为正数)1.如果res = r

2020-09-03 23:57:51 422

原创 LeetCode刷题系列:6

题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为"LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s =

2020-09-03 22:47:53 67

原创 LeetCode刷题系列:5

题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解题思路1.中心拓展回文串总是会有一个“中心”,中心可以是一个字符,也可以是由两个相同的字符构成的。中心可以在任何地方,所以,遍历字符串,对每个字符(和相同的两个字符)尝试进行拓展,看其是否能构成更长的回文串。时间复杂度是O(n2)O(n^2)O(n2)

2020-09-03 22:29:38 57

原创 LeetCode刷题系列:4

题目描述给定两个大小为 m和 n的正序(从小到大)数组 nums1和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1和 nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5解题思路一般解法给定两个有序数组,要求找到两个有序数组的中位数,最直观的思

2020-09-02 16:19:39 101

原创 中型C项目的Makefile管理

一个比较标准的中型项目的目录结构大致如下:如何对这样一种结构的项目文件进行编译链接,并且能够方便的添加新的文件并且减少不必要的编译,这就是Makefile需要做的事情1. 如何写一个便于进行项目管理的Makefile1.1 理解c程序应该如何编译一个最简单的c程序只有一个源文件*.c,编译的方法很简单,只需要...

2020-08-31 15:40:16 359

原创 初次接触前端设计的一些总结

初次接触图形UI界面的设计,需要学习的东西太多,而学的也不够系统和深入,此次只总结一些自学方法和感悟对于一个很陌生的领域,怎样快速入门?从我一段时间的学习经历来看,入门新领域,学习新知识最初需要克服的就是对自己能力的不自信。刚刚接触一门新的东西,和自己掌握的知识不同,从一个领域中的高手转换到另一个领域中的小白是一件很不容易的事情。但一定要尽快克服这个心态,让自己能够虚心的静下心来一步步由易到难的学习然后渐渐入门,越是浮躁,就越难学到东西,于是就更难坚持着学下去。有了良好的心态去学习,然后就是要想办法

2020-08-23 14:16:55 142

原创 打卡机项目总结

总体思路(模块划分和联系)1.时间模块timer.h/c时间模块为打卡机程序提供了一个随时可以查看当前程序内时间的功能。这个模块并行与其他部分,一旦启动,直到终止都是独立运行的。2.数据库data.h/c使用一个数组作为一个简单的数据库存储模块。同时提供一系列的API函数供用户操作数据库。3.主循环sys.c主循环作为程序的入口,同时负责与用户进行交互,接受用户的命令输入并呈现给用户所需的输出。该模块控制着子模块(时间模块)的启动和终止。用户的命令会被转化为对数据库API的调用。各模块

2020-08-14 19:55:31 1145

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除