观java算法直播-算法启蒙(点燃算法)
那天我正在家里看vue学习视频,然后QQ弹出那些报了名却没看的直播,刚好闲得慌,学了半天vue有点不耐烦了,我一看刚好java的课程,一点进去就看到老师在讲什么什么求2的整数次幂,在认真和不认真之间游走的看完了,差点没睡着,虽然粗略的看了一下,我觉得还是收获了几个知识点,因为这个这几个知识点还无法写成博客,那就写点燃了我对算法的哪个知识点吧。
求二的整数次幂
假如有一个变量n,这个时候我们要判断它是否是2的整数次幂,这个时候很简单,首先写一个循环,对2求余,判断是否为零,如果为零则将n的值改为n除2,然后判断n是否为1,如果不为1的话就继续循环直到余数不为零,或n等于1。这是老师第一个提出的想法,显然数值越大,循环次数越多,消耗时间也越多,而且代码的编写本身也很多。
老师提出了第二个想法,将2的整数次幂先举几个例子,例如2、4、8、16,接着就是直播的互动....问我们这几个数有没有什么规律,有哪位同学知道什么什么的,然后我发现水直播的人还蛮多的,明明啥都懂还来听,就跟我当年去学java基础第一章,安装环境变量...............于是分为两拨人,1、转换为二进制然后用&运算来判断 2、转换为二进制判断有几个1。
第一次接触算法的我听的一脸懵,我心想转换二进制我知道、&运算我知道,字符串查找我也知道但你这是干啥呢?接着老师开始讲解分别将2、4、8、16转换为二进制:
2:10
4:100
8:1000
16:10000
然后我一下就明白了第二种方案,因为就一个1还是在开头恩,一句话三步就能解决。但是老师压根就没理会第二种方案,将3、7的二进制写了一遍:
3:11
7:111
于是我又明白了(n&(n-1))==1就完了。。。在感叹算法的强大之余还对其有一丝敬意,我便很有兴趣的听了下去,接下来他讲了一个袋鼠跳跃的问题,也不知道是老师的表达问题还是第一次听算法,没听四分钟我就快晕了......
为了避开这个问题,我去学vue冷静了一下..........再次打开界面,那什么是时间复杂度、空间复杂度呢!
时间复杂度:就是度量一段算法执行所需时间长短
空间复杂度:就是度量一段算法执行所占空间大小
....................接下来的老师提到知识点分别是:
B树:mysql索引、红黑树:jdk1.8hashmap引入、字典树:NPL,自然语言处理、人工智能、快速排序:基准数,除了快速排序之外老师并没有对其他内容进行讲解,毕竟这也是没办法在公开直播中讲这么多知识的无奈,虽然听不到但是我想以后一定会将这些只是好好学学,这也算是我的算法启蒙了,还有快速排序我会专门为此再写一篇笔记。
欢迎技术讨论:2161672665
感谢翻阅