
算法之道
starbt
这个作者很懒,什么都没留下…
展开
-
堆和堆排序
堆的简介堆排序是一种复杂度为Nlog(N)的排序算法。介绍堆排序之前先讲一讲什么是堆。这里介绍的是数据结构中的二叉堆。 二叉堆是一颗完全二叉树,一般可以直接用数组实现。它的特点: 1. 父节点的键值总是大于等于(或小于等于)任何一个子节点的值。 2. 每一个节点的左右子树都是一个二叉堆。 当父节点的值都大于等于子节点的值,这样的二叉堆叫做大顶堆。当父节点的值都小于等于子节点的值,叫做小顶堆。原创 2017-10-27 15:26:55 · 222 阅读 · 0 评论 -
LintCode93:平衡二叉树的判定
题目描述给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 样例给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}A) 3 B) 3 / \ \ 9 20 20 /原创 2017-10-27 19:53:19 · 657 阅读 · 0 评论 -
LintCode167:链表的求和
题目描述你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。测试样例给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null解题思路这道题和大整数加减法类似。三个while循环,最后加上进位是否大于0的判断。 第一个循环 while(li原创 2017-10-27 20:09:25 · 605 阅读 · 0 评论 -
LintCode408:二进制求和
题目描述给定两个二进制字符串,返回他们的和(用二进制表示)。测试样例a = 11b = 1返回 100解题思路同大整数问题类似。 代码如下:class Solution {public: /* * @param a: a number * @param b: a number * @return: the result */ strin原创 2017-10-27 20:37:11 · 218 阅读 · 0 评论 -
LintCode1:位运算实现A+B
题目描述给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。测试用例如果a = 1, b = 2,返回3解题思路不能用+号,那么只能用位运算来求解了,实际计算机中的加法也是用位运算来做的。 计算机只知道0,1,根据加法的性质,可以得出下表: a b c 0 0 0 0 1 1 1 0 1 1 1 0 可以看到,这正和异或运算符^的结原创 2017-10-27 20:51:56 · 212 阅读 · 0 评论 -
LintCode452:删除链表中的元素
题目描述删除链表中等于给定值val的所有节点。测试样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。解题思路这道题虽然被归为入门题,但是坑很多。上次去深信服面试就问道了这道题。要注意两点:1、要删除的元素可能不止一个。2、要删除的可能是头节点。明白了这个,就好做了。代码如下:/** * Definition for si原创 2017-10-27 21:16:12 · 346 阅读 · 0 评论