【代码随想录】鱼与钰遇雨数据结构与算法刷题笔记-创新互联

代码随想录

https://www.programmercarl.com/

创新互联建站主要从事成都网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务新丰,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108编程素养 代码风格

C++代码风格参考google C++ style Guide
在这里插入图片描述
我使用的是驼峰命名法,其中空格留白的规则如下例:

class Solution {public:
    void moveZeroes(vector& 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;
        }
    }
};
  1. 操作符左右有空格
  2. 分割符, ;后有空格,类似于写英文文章
  3. 控制语句后有空格
  4. 大括号和函数保持在同一行 (Google规范是 大括号和 控制语句保持同一行的)
写算法题目是否用库函数的标准是什么?

如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。

如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,那么直接用库函数。

使用库函数大的忌讳就是不知道这个库函数怎么实现的,也不知道其时间复杂度,上来就用,这样写出来的算法,时间复杂度自己都掌握不好的。

例如for循环里套一个字符串的insert,erase之类的操作,你说时间复杂度是多少呢,很明显是O(n^2)的时间复杂度了。

在刷题的时候本着我说的标准来使用库函数,相信对大家回有所帮助!

算法性能分析 时间复杂度

什么是时间复杂度? 时间复杂度是一个函数,它定性描述某个算法的运行时间。
对于一个算法(或者程序)我们通常会估算它的操作单元数量(例如排序中的比较操作)来代表程序消耗的时间;
假设算法的问题规模为n(即操作的最小数据元素为n。例如排序问题中待排序列长度为n),则得到该问题规模下操作单元数量计算公式f(),那么对于问题规模为n的模型,操作单元数量的计算公式为f(n),其中,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这一现象中的增长率称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。

其中,O代表上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。

算法超时问题

首先,算法是否超时喝计算机的配置有关,1GHz=10亿Hz (Hz是赫兹单位)
1Hz 是CPU的一次脉冲(可以理解为一次改变状态,也叫时钟周期),1Hz=1/s,就是一秒1次脉冲,10亿Hz,就是一秒10亿次脉冲。并不是说1次脉冲代表一次计算机的运算,例如对于一个加法运算,cpu要执行四次才能完整这个操作,步骤一:把1放入寄存机,步骤二:把2放入寄存器,步骤三:做加法,步骤四:保存3。 同时存在有多个程序使用CPU的情况。

那我们的计算机究竟1/s能经过多少次运算呢,可以通过代码测试:测试硬件:2015年MacPro,CPU配置:2.7 GHz Dual-Core Intel Core i5 。
1s能进行k++操作 5 × 1 0 8 5\times10^{8} 5×108次。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:【代码随想录】鱼与钰遇雨数据结构与算法刷题笔记-创新互联
当前路径:http://azwzsj.com/article/cooohd.html