Nick

亘古而常青的昨天永远是过去,也永远会再来。

排序:
默认
按更新时间
按访问量

AVL数(平衡二叉树) C++实现

一般的二叉搜索树,在使用的过程中可能会慢慢变得不平衡,这样很可能会降低查找、插入等等的效率,因此我们需要使用算法来实现树的平衡。AVL树是一种比较经典的平衡二叉搜索树,它规定每个节点的左子树和右子树的高度差最多为1,代码如下。(参考博客中对remove函数的书写存在一定的问题,忘记在最后对每个结点...

2018-11-20 22:36:42

阅读数:9

评论数:0

C++实现二叉搜索树的基本功能

文中包括BST的:初始化、析构、插入、删除(重点部分)、清空、查找、先序遍历、中序遍历、后序遍历 代码: bst.h #ifndef BST_H #define BST_H #include <iostream> template&a...

2018-11-17 21:54:18

阅读数:9

评论数:0

优先队列(C++自实现)

优先队列(堆)满足先进先出,而且每次出队的都是队列中最小的(也可以是最大的,看实现过程)。 堆是一棵完全二叉树,所以优先队列一般用二叉堆实现。 分析: 1.一棵完全二叉树,所以可以用一个数组表示而不需要用指针。但是用数组就要事先估计堆的大小,所以用一个Capacity表示最大值。 2.因为保持堆序...

2018-11-14 21:57:22

阅读数:195

评论数:0

堆排序(Heap_Sort)

C++实现堆排序,包括调整堆的过程,以及排序过程。 代码: #include <iostream> #include <algorithm> #include &...

2018-11-14 11:56:50

阅读数:19

评论数:0

二维凸包求解(Andrew算法 )

Andrew算法是Graham算法的变种。 其主要思想为把凸包上的点依次放入栈中, 如果发现形成了凹多边形(叉积为负值) 就删除一些点,使得又能够维持凸的形态。 这时就会发现,处理各个点需要按照x从左往右的顺序,排序即可 当然,这只是处理了下凸的一个凸壳,倒过来再刷一次,就得到了整个凸包 代码: ...

2018-11-13 18:07:28

阅读数:12

评论数:0

并查集 C++

并查集的三种实现方式: 一、快速查找QuickFind,用一个数组记录该点所属类别。 二、快速合并QuickUnion,用树的形式保存每个点所属类别,每次只连接两个根节点。 三、带路径压缩的加权快速合并(Weighted QuickUnion),记录每个树的大小(按照树中结点个数来算),将小数合入...

2018-11-12 21:24:25

阅读数:14

评论数:0

商汤科技笔试算法题(手写卷积)

#include<iostream> #include<algorithm> #include<vect...

2018-10-15 21:11:23

阅读数:94

评论数:0

今日头条2018秋招笔试题(未完待续)

第一题: #include <iostream> #include <vector> #include <string> using namespace ...

2018-08-12 12:11:31

阅读数:2285

评论数:0

66.机器人的运动范围

题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+...

2018-06-11 15:36:33

阅读数:37

评论数:0

65.矩阵中的路径

题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵...

2018-06-11 14:46:31

阅读数:44

评论数:0

64.滑动窗口的最大值

题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4]...

2018-06-10 13:24:09

阅读数:29

评论数:0

63.数据流中的中位数

题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路:构造一个最大堆和一个最小堆,最大堆用来存放较小的那一半的数据,最小堆用来存放较大的那一半的数据,每...

2018-06-08 11:53:48

阅读数:63

评论数:0

62.二叉搜索树的第k个结点

题目描述给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。思路:采用先序遍历,引入参数k和res,前者用来记录取到还剩几个数,后者用来保存最后的结点。代码:/* struct TreeNode { ...

2018-06-07 16:27:36

阅读数:30

评论数:0

60.把二叉树打印成多行

题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路一:利用层次遍历二叉树的方式,用一个队列进行辅助,每次打印前取n = q.size(),可以保证逐行打印。代码一:/* struct TreeNode { int val; struct TreeNode ...

2018-06-05 11:08:06

阅读数:16

评论数:0

59.按之字形顺序打印二叉树

1.思路:层次遍历二叉树,其中用变量size来确定每一层中结点的个数,定义bool变量even来确定是第几层,若是偶数层,则将数组内的数进行颠倒,再存入二维数组中。2.代码:/* struct TreeNode { int val; struct TreeNode *left; ...

2018-06-04 12:34:08

阅读数:36

评论数:0

58.对称的二叉树

题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路一(递归版)构建一个bool heler(TreeNode* l, TreeNode* r)函数,用来判断传入的两个指针所对应的结点是否相等,若同为空,则返回true,若一个存...

2018-06-03 17:03:43

阅读数:45

评论数:0

56.删除链表中重复的结点

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 ...

2018-05-31 11:10:36

阅读数:16

评论数:0

55.链表中环的入口结点

题目描述一个链表中包含环,请找出该链表的环的入口结点。思路一:使用一个集合unordered_set<ListNode*>来保存已经访问过的结点,当第一次访问到已经被访问过的结点时,即为环的入口结点,此方法需要额外的空间进行辅助。代码一:/* struc...

2018-05-30 20:13:54

阅读数:16

评论数:0

54.字符流中第一个不重复的字符

题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字...

2018-05-29 16:54:15

阅读数:31

评论数:0

53.表示数值的字符串

题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和&quo...

2018-05-28 21:34:49

阅读数:35

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭