
初级算法杂谈
文章平均质量分 54
「已注销」
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
单链表反序
单链表的每个节点都指向下一个节点,所以要想将单链表反序,需要同时知道相连的三个节点,这样将中间节点的指针指向前一个节点之后仍然可以继续向后遍历链表。算法实现如下:Node * singleLinkedListReverse(Node *head){ //判断空链表、单节点链表 if(null == head || null == head->next) {原创 2013-03-12 13:33:38 · 5363 阅读 · 4 评论 -
浮点数 ieee 754
十进制小数转化为计算机存储过程以9.625单精度(32位)为例十进制数转二进制表示 9.625 = 1001.101 = 1 × 2 3 + 0 × 22 + 0 × 21 + 1 × 20 + 1 × 2-1 + 0 × 2-2 + 1 × 2-3 二进制数规范化 ieee 754规定,二进制表示必须按照格式±d.dd…d × βe , (0 ≤ d i < β) 即1001.原创 2015-07-10 15:18:40 · 1163 阅读 · 0 评论 -
也谈冒泡排序(bubble sort)---两次‘优化’
冒泡排序和优化原创 2013-03-12 11:53:15 · 2276 阅读 · 0 评论 -
二叉排序树转化为有序双向链表
题目:给出一棵排序二叉树根节点,将二叉树转化为有序的双向链表,只修改指针指向显然这是个经典的题目,难点也不多,重在好好理解排序二叉树的特性和二叉树的递归性质。解法:思路:排序二叉树既有特殊性left所以,将left和right子树分别转化完成后,root节点放在中间即可。当需要转化left子树的时候a)left == null,那么无需转化,head原创 2013-05-10 21:07:27 · 1820 阅读 · 0 评论 -
排序二叉树常规操作(搜索,插入,删除,最大节点,最小节点)
感谢参考http://www.cnblogs.com/zhuyf87/archive/2012/11/09/2763113.htmlhttp://www.cnblogs.com/GoAhead/archive/2012/10/26/2741508.html名字:二叉排序树又称为二叉搜索树和二叉查找树概念:以下情况可以定义一棵二叉排序树 a)空树原创 2013-05-09 21:12:55 · 1974 阅读 · 0 评论 -
在二叉树中查找两个节点的最近的公共祖先节点(有回溯指针)(NCA--nearest common ancestor)
这个题目有两个变种:有回溯指针的二叉树和无回溯指针的二叉树题目:给出两个节点node1,node2和二叉树根节点root,查找node1和node2的最近的公共祖先节点;特殊值(简易)之处在于每个节点都有一个指向父节点的回溯指针解法一:最常规的解法--依次轮询思路:使用回溯指针可以找到node1和node2到root的路径,在这两条路径上总有一个汇聚点,通过原创 2013-05-08 20:55:22 · 1136 阅读 · 0 评论 -
在二叉树中查找两个节点的最近的公共祖先节点(无回溯指针)(NCA--nearest common ancestor)
这个题目有两个变种:有回溯指针的二叉树和无回溯指针的二叉树题目:给出两个节点node1,node2和二叉树根节点root,查找node1和node2的最近的公共祖先节点解法一:最常规的解法思路:仍然是递归性质(我们可以这样理解递归:左子树和右子树在形式上都等同于根树,这就形成了递归的条件)。试想把一棵树分为三个部分:root,left,right那么no原创 2013-05-08 19:20:55 · 1301 阅读 · 0 评论 -
短字符串a中的字母是否都包含在长字符串b中
感谢参考http://kb.cnblogs.com/page/150578/按照笔记本的分类,我们应该先说题目聊算法。题目:假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法上讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?举例:比如,如果是下面两个字符串:String 1: ABCDEF原创 2013-05-07 15:34:19 · 1109 阅读 · 0 评论 -
最大连续子数组
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。解法一:最基本的轮询思路:找出所有的连续子数组,求和原创 2013-05-07 18:08:54 · 950 阅读 · 0 评论 -
二叉树遍历(前中后层序/非递归)
感谢参考如下http://www.cnblogs.com/kekec/archive/2011/10/11/2207671.htmlhttp://kb.cnblogs.com/page/150578/一:前中后序递归实现/*前中后序的递归实现理解起来最为简单,要点在于visit(node)的位置。*//*前中后序递归实现*///前序遍历void BT_PreOrder原创 2013-05-07 12:01:58 · 1195 阅读 · 0 评论 -
无聊的双向冒泡排序
在网上看到了 both way bubble sort的算法,但是分析之后觉得在效率上等同于第二次优化的bubble sort。实现如下: void bothWayBubbleSort( int array[]) { int left = 0, right = array.length - 1; while (left < r原创 2013-03-12 16:48:06 · 1103 阅读 · 0 评论 -
合并有序链表
合并两个升序链表,要点在于:边界条件判断,即链表可能为空。剩下的就是依次比较两个链表的头结点,把更小的节点放到新链表中去,继续遍历。算法实现如下:/*1: 边界条件判断2: 头结点的值3:*/Node * mergeOrderedLinkedList(Node *head1, Node *head2){ //边界条件判断 if(null == head1原创 2013-03-12 15:31:31 · 1072 阅读 · 0 评论 -
查找单链表中间节点
题目的解法当然不可能是一次遍历得到链表长度,然后再遍历一半,那是最最没办法的办法。在链表中很多题目的解法都跟大小指针有关。比如这道题目,设立两个指针,一个单步走,一个两步走,当大步指针到达链表尾部的时候,小步指针也正好位于链表中间位置。算法实现如下:Node * findMiddleNodeOfLinedList(Node *head){ //判断空链表、单节点链表 if原创 2013-03-12 13:49:14 · 7210 阅读 · 1 评论 -
原码 补码
整数在计算机中都是以二进制的方式存储的,例如 2 = 0000 0010。最高位是符号位,0表示正数,1表示负数。正数的情况很容易理解,但是负数存储的是补码 ,-2 = 1111 1110。(一) 概念 以8位的字长为例 正数补码==原码 负数补码为,除符号位外取反,然后加1 +2 = 0000 0010[原码] = 0000 0010[补码] -2 = 1000 001原创 2015-07-14 11:09:10 · 2074 阅读 · 0 评论