深入理解 c 指针学习
看《深入理解c指针》复习了一些c指针的东西
常量指针
指针的读法
指针的读法应该是从右向左读,举几个例子
int * const cpi=#
1. cpi是一个变量 cpi
2. cpi是一个常量 const cpi
3. cpi是一个常量指针 * const cpi
4. cpi是一个指向int类型的常量指针 int * const cpi
看《深入理解c指针》复习了一些c指针的东西
指针的读法应该是从右向左读,举几个例子
int * const cpi=#
1. cpi是一个变量 cpi
2. cpi是一个常量 const cpi
3. cpi是一个常量指针 * const cpi
4. cpi是一个指向int类型的常量指针 int * const cpi
今天完成了实验楼第 20 期的三道题目 pretty interesting
优化代码性能,这个题目很简单,首先想到的就是去掉递归,最容易想到的,就是类似于动态规划中备忘录的方法
1 | int fib(const int i){ |
简单的贪心算法,类似于活动安排的思想,为了选择尽可能多的线段,应该选择终点小的线段
首先把线段按照终点排序,依次选择不重叠的线段,就可以安排可能多的线段了
最优子结构性质:
假如选择了第一个,那么就要在余下的时间里选择最多的选择
贪心选择:
选择终点早的线段,可以使得选择的线段尽可能多,这就是贪心选择
稍微有点难的贪心算法题目
最优子结构:
前n条线段重叠的最大距离=max(前n-1条线段的重叠的最大距离,第n条线段和前n-1条线段重叠的距离)
贪心选择:
计算第n条线段与前n-1条线段中的一条线段的重叠长度时,
\[重叠长度= \begin{cases} 另一条线段的终点-当前线段的起点,&if 当前线段终点大于另一条线段终点 \\ 当前线段终点-当前线段的起点,& if 当前线段终点小于另一条线段终点 \end{cases} \]
当前线段的终点我们没办法选择,但是我们可以选择另一条线段的终点,让它最大,所以我们可以维护一个最大的线段右端点(并不是最长线段的右端点),也就是说和这条线段计算可以获得当前的最长重叠长度,也就是贪心选择性质
也是比较简单的贪心算法,最喜欢这种比较简单的题目了2333
最优子结构性质:
走完前n个格子所需要的初始能量最小,等于走完前n-1个格子所需要的初始能量加上从第n-1个格子走到第n个格子所需要初始能量
贪心性质:
尽可能给最少的初始能量,所以只在能量为负数时,给初始能量,给得初始能量只能让机器人的能量给0,能够移动就可以了
代码:
超级简单的贪心算法
首先将n个字符按照字符个数进行排序,尽可能让完美度最大的话,就是让字符个数多的得到较大的完美度,就可以得到最后的最大完美度了
最优子结构:
\[i个字符的完美度=前i-1个字符完美度+当前字符最大完美度(给当前字符赋予最大的完美度)\]
贪心选择:
尽可能给字符个数较多的字符较大的完美度
1 | #include <iostream> |
今天做一个jsp注册的小demo,突然就想连接数据库,做一个真正的demo,所以就有了诸多的事情
jsp连接mysql数据库需要使用jdbc驱动,jdbc驱动的下载地址是https://dev.mysql.com/downloads/connector/j/,在下面选择platform independent,然后下载第一个或者第二个都是可以的,之后解压压缩包,得到里面的一个** mysql-connector-java-8.0.11.jar ** 文件,这个文件就是我们主要的驱动文件。
emmm 假如你出现找不到package的错误,你可以采取下面几个措施(可能有效,滑稽):
1. 把mysql-connector-java-8.0.11.jar放到tomcat的lib目录下面 2. 右键工程名,找到properties,找到Java Build Path,在右侧 add External JARS,添加mysql-connector-java-8.0.11.jar
3. 添加mysql-connector-java-8.0.11.jar到系统环境变量CLASS_PATH中去
昨天在看go语言中参数声明的方式的博客发现了函数指针。c语言中指针的使用尤为复杂,其中函数指针的用法最实用也最复杂,总结一下函数指针的使用
函数类型就是一个函数,函数指针就是一个指向函数的指针,需要注意的是在我们把一个函数赋值给一个函数指针的时候,会自动把函数类型转型为函数指针
int (*p)(int a,int b)=test
//test是一个函数,自动转型
int (*p)(int a,int b)=&test
//这种是正常函数指针赋值
在学习与proc有关的内核模块开发的时候,创建了一个可读写的proc文件,但是写的时候发生了权限错误。。。。 sudo echo "temp" > /proc/hello
permission denied
一开始看的答案以为是sudo 与suid有关啥的,结果看了另一个答案,发现原因并不是那样
真正的原因是这样的:
我们都知道linux中可以运行一个命令,然后把命令的输出重定向到文件中去。所以我们的命令可以这样解释sudo echo "temp"
这是一个命令,这个命令是通过root
权限运行的,之后把运行的结果重定向到/proc/hello中去,这时候的重定向已经变成了普通用户的权限。
解决方法:
1. su 全部都是root
权限 2. tee 三通 echo "temp" |sudo tee /proc/hello 3. sudo sh -c "echo "temp" > /proc/hello" #使用root权限运行sh一条命令
把字符转换成一定高度的Z字型,z字形转换,主要是找规律
1 | 1 9 17 |
找规律吧,骚年
首先第一列的数字(1,2,3,4,5)是递增的,我们直接遍历就可以了。很容易计算出一个循环是一个竖行加一个斜行,数字的个数是2n-2。列与列之间相隔的数字是2n-2(n代表行数),上面隔8。对于其余的数字我们找其他的规律,看3和7吧
3和7和下面的组成一个三角形,我利用这个三角形找规律:
总的行数为n,我遍历的时候,当前行号为i,那么三角形的高就是n-i,三角形的两条边就差一,所以我们很容易计算7=3+(5-3)2 ===> secondj=j+(numrows-i)2