在各行各业疯狂涉足的当下,我们需要不断的打好基础,学习新的东西,才能保证自己的竞争力。数据结构和算法可以说是所有编程语言的基础。学好它不仅能让我们写出更健壮、高效、稳定的代码,还能在面试中表现得更好。数据结构和算法的学习并不枯燥,它有着独特的魅力。数据结构和算法的魅力在于:如何判断一个数是否是2的N次方,写的是一般逻辑,即除以2带循环,最后看余数是否为1。代码如下,我们计算时间复杂度为O(n)while(n>1){if(n%2==0){n=n/2;}else{System.out.println("不是2的N次方");休息;}}if(n==1){System.out.println("它是2的N次方");}但是知道了数据结构和算法,我们其实可以有更好的解法。我们来分析一下,2的N次方,也就是我们要判断的数n有什么特点呢?转为二进制,如下:然后比较n-1的二进制数据:发现n和n-1的二进制刚好互补,所以可以按位与“&”运算:10&01=00100&011=0001000&0111=0000...即:n&(n-1)==0的个数是2的N次方!这样一改,一个时间复杂度为O(n)代码的while循环奇迹般的优化成了一行事件复杂度为O(1)代码!这就是数据结构和算法的魅力!让你写出更高性能、更强大的代码相关概念算法的五大特点Finiteness:在有限的步数内正常结束,不能形成死循环Deterministic:算法中的每一步都必须具有一定的MeaningFeasibility:算法的每一步都必须是可行的。输入:有多个或零个输入。输出:至少一个或多个输出。设计原则Correctness:应该能够正确解决一个问题,得到正确的答案或预期结果Readability:其他人容易阅读和理解,它要解决的问题和它想要达到的目的Robustness:当输入数据不合法,算法应该做出适当的响应或相应处理,而不是莫名其妙的输出。并且处理错误的方式不应该是打断程序的执行,而是返回一个表示错误或者错误性质的值,这样可以在更高的抽象层次上进行处理。高效率低存储时间复杂度:运行一个程序所花费的时间,用O()表示,效率从高到低:O(1)>O(logn)>O(n)>nO(logn)>O(n^2)>O(n^x)空间复杂度:运行程序所需的内存,用OOM表示
