代码随想录
https://www.programmercarl.com/
编程素养
代码风格
C++代码风格参考google C++ style Guide
我使用的是驼峰命名法,其中空格留白的规则如下例:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
if (nums[fastIndex] != 0) {
nums[slowIndex++] = nums[fastIndex];
}
}
for (int i = slowIndex; i < nums.size(); i++) {
nums[i] = 0;
}
}
};
- 操作符左右有空格
- 分割符
, ;
后有空格,类似于写英文文章 - 控制语句后有空格
- 大括号和函数保持在同一行 (Google规范是 大括号和 控制语句保持同一行的)
写算法题目是否用库函数的标准是什么?
如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。
如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,那么直接用库函数。
使用库函数最大的忌讳就是不知道这个库函数怎么实现的,也不知道其时间复杂度,上来就用,这样写出来的算法,时间复杂度自己都掌握不好的。
例如for循环里套一个字符串的insert,erase之类的操作,你说时间复杂度是多少呢,很明显是O(n^2)的时间复杂度了。
在刷题的时候本着我说的标准来使用库函数,相信对大家回有所帮助!
算法性能分析
时间复杂度
什么是时间复杂度? 时间复杂度是一个函数,它定性描述某个算法的运行时间。
对于一个算法(或者程序)我们通常会估算它的操作单元数量(例如排序中的比较操作)来代表程序消耗的时间;
假设算法的问题规模为n(即操作的最小数据元素为n。例如排序问题中待排序列长度为n),则得到该问题规模下操作单元数量计算公式f(),那么对于问题规模为n的模型,操作单元数量的计算公式为f(n),其中,随着数据规模n的增大,算法执行时间的增长率
和f(n)的增长率相同,这一现象中的增长率称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。
其中,O代表上界的
,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。