动态规划
动态规划什么是动态规划动态规划(Dynamic Programming, DP)是一种用来解决一类最优化问题的算法思想。简单来说,动态规划将一个复杂的问题分解成若干个问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会将每个求解的子问题的解记下来,这样当下次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。注意:虽然动态规划采用这种方式来提高计算效率,但不能说这种做法就是动态规划的核心。
动态规划前提一个问题必须拥有重叠子问题和最优子结构才能使用动态规划。
重叠子问题如果一个问题可以被分解为若干个子问题,且这些子问题会重复出现,那么就称这个问题拥有重叠子问题(Overlapping Subproblems)。动态规划通过记录重叠子问题的解,来使得下次碰到相同的子问题时直接使用之前记录的结果,以此避免大量重复计算。因此,一个问题必须拥有重叠子问题,才能使用动态规划去解决。
最优子结构如果一个问题的最优解可以由其子问题的最优解有效的构造出来,那么称这个问题拥有最优子结构(Optimal Sbustructure)。最优子结构保证了动态规划中原问题的最优 ...
刷leetcode常用的c++库
c++中字符串和数互转c++字符串转为数方法一:使用std::stoi
123456789#include <iostream>#include <string>int main(){ std::string str= "123"; int num = std::stoi(str); //将字符串转换为int类型 std::cout<<num<<std::endl; return 0;}
方法二:使用c库函数atoi
12345678#include <iostream>#include <cstdlib>int main(){ char str[] = "123"; std::cout<<atoi(str)<<std::endl;.//将字符串转化为int型 return 0;}
c++数转为字符串方法一:使用c++11中的std::to_string()函数12345678#include <iostr ...
配置文件解释器
c语言写的配置文件解释器下载地址
直接下载: 戳这里
gitee地址: https://gitee.com/ccchenji/cf_interpreter
文件说明cf_interpreter.c : 解释器配置源文件
cf_interpreter.h : 解释器.h文件
cf_interface.h : 解释器api接口文件
cf.txt: 示例工程对应的配置文件
main.c: 示例工程对应的main文件
Makefile: 示例工程对应的编译文件
配置文件语法说明配置文件例程参考cf.txt12345TEST_DOUBLE = 4.3;TEST_INT= 4;TEST_STR = "world";
语法关键字 = 值 ;
解释器api说明1234567891011121314151617181920212223242526272829// 是否开启解释器的警告和错误信息,如果不需要开启直接注释掉#define CF_MESSAGE// 解释器支持的变量类型// 当前只支持三种类型 int ,double,字符串enum cf_type{VAR_ ...
Lua语言的完整文法(BNF描述)
Lua的完整文法采用扩展BNF描述的Lua完整语法。在扩展BNF中,{A}表示0或多个A,[A]表示一个可选的A
文法部分:
chunk ::= block
block ::= {stat} [retstat]
stat ::= ‘;’ | varlist ‘=’ explist | functioncall | label | break | goto Name | do block end | while exp do block end | repeat block until exp | if exp then block {elseif exp then block} [else block] end | for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end | for namelist in ...
leetcode线性表
数组删除有序数组中的重复项描述:
给你一个升序排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持一致 。
示例:
123输入:nums = [1,1,2]输出:2, nums = [1,2,_]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
代码1:
123456789101112class Solution { int removeDuplicates(vector<int>& nums) { if(nums.empty()) return 0; int index = 1; for(int i=1;i<nums.size();++i) { if(nums[i] != nums[index-1]) { nums[index++] = nums[i]; } } return index; }};
代码2 ...
vim常用插件安装
vim常用插件安装Vim8内置插件管理方案在Vim8这个版本Vim有了自己的插件管理方案,引入了packages的概念。用户只需要将插件放在指定的目录下,vim 就会自动加载这个插件。
假如有插件NERDTree,只需要将插件放在~$ .vim/pack/vendor/start/这个目录下即可。
Vim8会自动加载1~$ .vim/pack/*/start/目录下的插件,也就是说插件也可以放在.vim/pack/NERDTree/start/下。
那些我们不想自动加载的插件可以放到opt目录下。1~$ .vim/pack/*/opt/然后在~$ .vimrc中使用packadd来手动加载插件,例如:
12345if xxx_version > 34 packadd xxxelse packadd xxxendif
:computer:在windows中,vim的下载目录下,vim82文件夹相当于.vim文件夹,_vimrc相当于.vimrc
:notebook: 查看文档::h packages可以获得更多帮助信息
vim插件推荐
参阅 Vim Awesome 获取热门插件
...
Linux杂项设备驱动
Linux杂项设备Linux杂项设备驱动简介什么是杂项设备
杂项设备是字符设备的一种。可以自动生成设备节点。Linux系统里有很多的杂项设备。我们可以输入 cat /proc/misc命令来查看
杂项设备和普通字符设备的区别
杂项设备比字符设备代码简单
杂项设备的主设备号是相同的,均为10,次设备号是不同的。主设备号相同就可以节省内核资源。
主设备号和次设备号是什么
设备号包含主设备号和次设备号,主设备号在Linux系统里面是唯一的,次设备号不一定唯一。
设备号是计算机识别设备的一种方式,主设备相同的就被试为同一类设备
主设备号可以通过命令 cat /proc/devices来查看
杂项设备的描述
杂项设备的结构体在源码 include/linux/miscdevice.h。vim include/linux/miscdevice.h 查看
123456789101112struct miscdevice { int minor; //次设备号 const char *name; //设备节点的名字 const struct ...
linux驱动
linux驱动的分类
字符设备驱动
IO的传输过程是以字符为单位的,没有缓冲。
如I2C,SPI都是字符设备
快设备驱动
IO的传输过程是以快为单位的。跟存储相关的,都属于快设备,比如,tf卡
网络设备驱动
与前两个不一样,是以套接字来访问的
ps:其中,理解和掌握字符设备驱动的概念最重要,因为在工作中遇到的大部分是字符设备驱动
驱动程序的内容
头文件
驱动模块的入口和出口
声明信息
功能实现
写一个驱动代码的流程第一步:包含头文件
1234//包含宏定义的头文件#include <linux/init.h>// 包含初始化加载模块的头文件#include <linux/module.h>
第二步:驱动模块的入口和出口
12module_init();module_exit();
第三步:声明模块拥有开源许可证
1MODULE_LICENSE("GPL");
*第四步:模块功能的实现
1234567891011121314151617181920//包含宏定义的头文件#include <linux/init.h>/ ...
arm安装vsftpd
下载下载最新版本源码包,下载地址:https://security.appspot.com/vsftpd.html#download
本文下载的源码包为:vsftpd-3.0.5.tar.gz
解压123#将源码包拷贝进虚拟机(我拷贝到了桌面),进入拷贝的目录,然后运行下列命令$ tar -zxvf vsftpd-3.0.5.tar.gz$ cd vsftpd-3.0.5
配置修改Makefile文件
1CC = xxx #你的编译器
运行1$ make
复制文件将生成的 vsftpd 复制到目标板 /usr/sbin 目录,vsftpd.conf 复制到目标板 /etc 目录,并添加 vsftpd 为可执行:
1$ chmod 777 vsftpd
配置使用vi对vsftpd.conf文件,并进行配置。(下面的配置可用)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 ...
vim指令
vim中执行shell命令单纯执行shell命令命令: !command解释: 不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容。
特别的可以运行:!bash来启动一个bash shell并执行命令,不需要退出vim,可以通过exit命令退出shell,退出shell后,会像上面图片那样提示Press ENTER or type command to continue.
将shell结果插入到当前文件命令: r !command解释: 将shell命令command的结果插入到当前行的下一行例子: r !date