【算法扫盲】一些简单的算法及概念入门

导读:本篇文章讲解 【算法扫盲】一些简单的算法及概念入门,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1、位移运算

所有的位移运算都是基于二进制数据的移动,所以最起码需要明白十进制和二进制之间的转换。以12345这个十进制数为例,那么对应的二进制整型就是00000000000000000011000000111001,位移的运算就是基于00000000000000000011000000111001这些数据进行的移动。

<<

12345转为二进制其实就是11000000111001,但整型占32位,高位用0表示,所以整体表示就是00000000000000000011000000111001。左移一位就是将11000000111001往左移一位,右边补0

【算法扫盲】一些简单的算法及概念入门

位移后十进制数值变成:24690,刚好是12345的二倍,所以有些人会用左位移运算符代替乘2的操作,但是这并不代表是真的就是乘以2,很多时候,我们可以这样使用,但是一定要知道,位移运算符很多时候可以代替乘2操作,但是这个并不代表两者是一样的!

>>

【算法扫盲】一些简单的算法及概念入门

右移后得到的值为 6172 和int 类型的数据12345除以2取整所得的值一样,所以有些时候也会被用来替代除2操作。但是如果继续右移,直接右移14位,即为e>>14,则结果为0。

【算法扫盲】一些简单的算法及概念入门

>>>

【算法扫盲】一些简单的算法及概念入门

无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的,而右移运算符是补符号位的。在右移运算符中,右移后补0,是由于正数 12345 符号位为0 ,如果为1 则应补1。

2、简单排序

选择排序

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

冒泡排序

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

插入排序

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

归并排序-递归实现

【算法扫盲】一些简单的算法及概念入门

归并排序-非递归实现

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

快速排序

【算法扫盲】一些简单的算法及概念入门

3、简单算法题

假设有一个函数可以等概率返回[1,5]的整数。请利用这个函数写出等概率返回[1,7]之间的整数:

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

假设有一个函数,以p概率返回0,1-p概率返回1。请利用这个函数写出等概率返回0和1:

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

4、对数器

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

有了对数器以后,不需要依赖任何别的工具,对数器就可以生成随机样本自己来做比对。当样本数据足够大的时候,错误的例子也会足够的多,对数器可以将错误打印出来,自己就可以一点一点去追溯错误的源头。

5、二分法

使用二分法在有序数组中找到num

【算法扫盲】一些简单的算法及概念入门

使用二分法在有序数组中找到 >= num 最左的位置

【算法扫盲】一些简单的算法及概念入门

局部最小值问题

【算法扫盲】一些简单的算法及概念入门

6、时间复杂度

先来介绍一个概念常数操作:

如果某一次的操作和数据量没有关系,那它就是固定时间的,这种操作就是常数操作。比如:

① 整型数据的+、-、×、÷都是典型的常数操作符号;

② 数据寻址,取出数组中的第1个数据和第100万个数据时间上没啥区别;

时间复杂度是用来描述进行了多少次常数操作的指标。 

7、链表问题

实现单链表和双链表的逆序操作

【算法扫盲】一些简单的算法及概念入门

使用单链表实现队列

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

使用单链表实现栈

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

使用双向链表实现双向队列

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

给定一个单链表的头节点head,和一个正数k。实现k个节点的小组内部逆序,如果最后一组不够k个就不调整。比如:

调整前:1 > 2 > 3 > 4 > 5 > 6 > 7 > 8,k=3

调整后:3 > 2 > 1 > 6 > 5 > 4 > 7 > 8

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

给定两个链表的头节点head1和head2,认为从左到右是某个数字从低位到高位,实现返回相加之后的链表。比如:

给定:4 > 3 > 6、2 > 5 > 3

返回:6 > 8 > 9(436 + 253 = 986)

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

给定两个有序链表的头节点head1和head2,返回合并后的大链表,要求依然有序。比如:

给定:1 > 3 > 3 > 5 > 7、2 > 2 > 3 > 3 > 7

返回:1 > 2 > 2 > 3 > 3 > 3 > 3 > 5 > 7

【算法扫盲】一些简单的算法及概念入门

8、位图的实现

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

9、位运算实现+、-、×、÷

先来普及一个常识:异或运算(^)就是无进位相加,就是1 + 1的结果是0,忽略掉进位1。

比如:0 1 1 0 1 1 0

加上:1 1 1 0 1 1 1

结果:1 0 0 0 0 0 1

而有进位相加产生的【进位】就是 & 运算之后 <<1 的结果。

比如:0 1 0 1 1 1 0

&上: 0 0 1 0 1 0 0

结果:0 0 0 0 1 0 0 

<<1: 0 0 0 1 0 0 0     –> 这就是相加的进位

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

10、二叉树

判断两棵树结构是否相同

【算法扫盲】一些简单的算法及概念入门

判断一棵树是否是镜面树

【算法扫盲】一些简单的算法及概念入门

给定一个二叉树,找出其最大深度

【算法扫盲】一些简单的算法及概念入门

从前序与中序遍历序列构造二叉树

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

【算法扫盲】一些简单的算法及概念入门

判断一棵树是不是平衡二叉树

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

【算法扫盲】一些简单的算法及概念入门【算法扫盲】一些简单的算法及概念入门

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111926.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!