一周思进

每周学习总结,相信可以走的更远.

CMake 创建简单工程

最近在看 《Professional-CMake-A-Practical-Guide》,下面对于如何使用 cmake 编译生成一个可执行文件做下记录。 cmake 工程创建时一般分两个目录,一个是源码目录,一个是构建目录,CMakeLists.txt 及工程代码都在源码目录,而 cmake 构建产物则都在构建目录。这样便于文件的版本管理,看起来也会非常干净,不至于中间成果物与源码在一起而显...

openssl交叉编译

一、源码下载 去官方网站下载最新版本的 openssl,需要注意推荐使用1.1.1版本,1.1.0及1.0.2版本都已不再支持维护,如系统还在使用老版本的openssl,也应尽快升级到1.1.1版本。 直接点击上图中的 openssl-1.1.1g.tar.gz 下载源码压缩包,通过浏览器完成下载,也可以使用 wget 方式下载,如下 wget https://www.openss...

Cmake 逻辑操作

6.1.5. Existence Tests 如下语句用于判断 CMake 实体是否存在,在较大、复杂的工程尤其有用 if(DEFINED name) if(COMMAND name) if(POLICY name) if(TARGET name) if(TEST name) # Available from CMake 3.4 onward DEFINED 只判断对象是否...

二分查找

二分查找常用场景就是针对已排序的数组进行搜索,下面是代码实现: def bsearch(list, num): low = 0 high = len(list) - 1 while(low <= high): # 注意要包含等于,否则如果只有一个的情况下,还需要单独写if语句 mid = low + (high-low) // 2 ...

分治题解

最近学习积极性不高啊… 要控制啊 = = 将之前 ARTS 做的三个分治思想的题目单独整在一块再发下,方便后面回顾吧 一、归并排序 思路: 将数组拆分成两半,分别对这两半进行排序,然后将这排序后的两半再进行排序得到最终结果 将数组拆分两半的过程可以使用递归编程方式,直到无法再进行拆分为止 def merge(array: List, start: int, midd...

ARTS-WEEK10

Algorithm 用分治的思想重新做了下LeetCode 14题,还是没能直接做出来… class Solution: def longestCommonPrefix(self, strs): if not strs: return "" return self.lcp(strs, 0, len(strs)-1) ...

ARTS-WEEK9

Algorithm 这周学习快速排序 快排的整体思路是先选择一个值,比如直接选择末尾值,然后将数组中的元素与该值进行比较,比这小的放左边, 比这大的放右边,这样操作完之后,选择的这个值在数组中的位置就是明确了的,剩下的就是将左边的数据和右 边的数据通过同样的方法进行操作,可以通过递归方式来完成 这里的重点是如何原地将数值进行左右分区,方式是通过数值交换,思路有点类似双指针,一个指向要被...

ARTS-WEEK8

Algorithm 本周做了下 LeetCode 第8题,文章单独整理见 atoi实现 几个注意点: 1、int型最大值和最小值可以直接用宏INT_MAX和INT_MIN表示,在头文件”limits.h”中定义 2、越界需要通过越界值/10操作提前来进行判断,类似两数相加判断是否会越界,也可以提前通过最大值来减原有值与相加值进行比较 3、这里data需要声明成无符号int整型,否则L...

atoi实现

LeetCode第8题,atoi实现 这一题个人觉得主要是考察越界处理 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−2^31,  2^31 − 1]。如果数值超过这个范围,请返回  INT_MAX (2^31 − 1) 或 INT_MIN (−2^31) 。 代码实现如下: #include <ctype.h> // isdig...

ARTS-WEEK7

Algorithm 上周学习了下递归,这周学习递归在排序算法中的使用-归并排序 思路: 将数组拆分成两半,分别对这两半进行排序,然后将这排序后的两半再进行排序得到最终结果 将数组拆分两半的过程可以使用递归编程方式,直到无法再进行拆分为止 def merge(array: List, start: int, middle: int, end: int): len ...