算法与数据结构
文章平均质量分 71
HUST_Miao
这个作者很懒,什么都没留下…
展开
-
今日头条2017后端工程师笔试题
1、最大映射有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看做一个整数,唯一的要求是这些整数必须是正整数且它们的字符串不能有前导零。现在问你怎样映射字符才能使得这些字符串表示的整数之和最大?输入描述:每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n , 接下来有 n 行,每...原创 2021-03-07 11:58:37 · 473 阅读 · 0 评论 -
二叉树各种遍历操作
目录1 求二叉树深度1.1 递归实现1.2 非递归实现(队列)1.3 非递归实现(栈)2 求二叉树高度 3 二叉树先序遍历3.1 递归版本3.2 非递归版本3.3 利用先序创建二叉树 4 二叉树中序遍历4.1 递归版本4.2 非递归版本5 二叉树后序遍历5.1 递归版本5.2 非递归版本6 二叉树层序遍历7 二叉树深度优先遍历...原创 2018-09-07 10:08:45 · 1053 阅读 · 0 评论 -
最大连续子序列的和
最大连续子序列和最大连续子序列和是一个常见的面试题,也是算法中经典的一个问题。作为总结,今天就从最简单的暴力求解,写道目前能达到最好的线性时间复杂度的算法。问题描述:找出一个整型数组中的最大连续子序列的和 测试用例:int[] a = { 1, -3, 7, 8, -4, 12, -10, 6 }; 输出:23//即最大连续子序列和是 7 + 8 - 4+ 12 = 231、O...转载 2018-09-04 15:47:29 · 950 阅读 · 0 评论 -
C++中STL用法超详细总结
目录1 什么是STL?2 STL内容介绍2.1 容器2.2 STL迭代器2.3 算法2.4 仿函数2.4.1 概述2.4.2 仿函数(functor)在编程语言中的应用 2.4.3 仿函数在STL中的定义2.5 容器适配器2.5.1 stack2.5.2 queue & priority_queue3 常用容器用法介绍 3.1 vec...原创 2018-08-21 22:06:54 · 203170 阅读 · 49 评论 -
二叉树先序遍历
下面是leetcode上的一道题,先序遍历二叉树。Given a binary tree, return the preorder traversal of its nodes' values.For example:Given binary tree{1,#,2,3}, 1 \ 2 / 3 return[1,2,3].Note: ...原创 2018-08-21 10:48:12 · 352 阅读 · 0 评论 -
二叉树遍历——深度优先(DFS)与广度优先(BFS)
二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)深度优先遍历:从根节点出发,沿着左子树方向进行纵向遍历,直到找到叶子节点为止。然后回溯到前一个节点,进行右子树节点的遍历,直到遍历完所有可达节点为止。广度优先遍历:从根节点出发,在横向遍历二叉树层段节点的基础上纵向遍历二叉树的层次。DFS实现:数据结构:栈父节点入栈,父节点出栈,先右子节点入栈,后左子节点入栈。递归遍历全部节...原创 2018-08-20 22:22:27 · 4592 阅读 · 0 评论 -
常用排序算法详细总结
排序算法总结常用排序算法(一) 插入排序、希尔排序、冒泡排序常用排序算法(二) 选择排序、快速排序常用排序算法(三) 归并排序、堆排序、基数排序 ...原创 2018-08-17 08:18:53 · 809 阅读 · 0 评论 -
常用排序算法(三)归并排序、堆排序、基数排序
常用排序算法(一)插入排序、希尔排序、冒泡排序常用排序算法(二)选择排序、快速排序归并排序1. 基本思想:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。首先考虑下如何将2个有序数列合并。这个非常简单,只要从比较2个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即...原创 2018-08-15 23:36:24 · 1055 阅读 · 0 评论 -
常用排序算法(二)选择排序、快速排序
常用排序算法(一)插入排序、希尔排序、冒泡排序常用排序算法(三)归并排序、堆排序、基数排序1 选择排序 选择排序也是一种简单直观的排序算法。它的工作原理很容易理解:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法平均时间复杂度O(n2)。...原创 2018-08-13 10:53:36 · 2866 阅读 · 0 评论 -
常用排序算法(一)插入排序、希尔排序、冒泡排序
1. 插入排序算法最简单的排序算法之一是插入排序(insertion sort)。插入排序由N-1趟(pass)排序组成。对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P上的元素为已排序状态。插入排序利用了这样的事实:位置0到位置P-1上的元素是已排过序的。下图显示一个简单的数组在每一趟插入排序后的情况。 C语言给出算法参考程序如下,显然,插入排序算法复杂度为O(N2)O...原创 2018-08-01 21:14:13 · 1256 阅读 · 0 评论 -
C++ stack用法
C++库以提供“模板”为主。所谓模板,是指不必预先制定类型的函数或类。我们可以借助STL(标准模板库 Standard Template Library, STL)提供的高效算法来管理数据。为应对多种需求,STL为用户提供了多种名为容器(Container)的类,用于管理数据集合。在创建动态数组、表、栈、队列等数据结构时,我们只需要定义对应的容器,然后调用相应成员函数或算法即可。stack...原创 2018-08-06 16:16:21 · 32551 阅读 · 4 评论 -
笔试总结--链表操作
1.输入一个链表,输出该链表中倒数第k个结点。//链表节点类public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}最简单粗暴一点的方法:先遍历一次,得到链表长度l,再遍历一次,遍历到l-k+1处的节点即为所...原创 2018-08-01 10:08:16 · 300 阅读 · 0 评论 -
C++实现内存池
1. 内存池设计1.1 目的在给定的内存buffer上建立内存管理机制,根据用户需求从该buffer上分配内存或者将已经分配的内存释放回buffer中。1.2 要求尽量减少内存碎片,平均效率高于C语言的malloc和free。1.3 设计思路将buffer分为四部分,第1部分是mem_pool结构体;第2部分是内存映射表;第3部分是内存chunk结构体缓冲区;第4部分是实际...转载 2018-08-09 10:02:54 · 32152 阅读 · 2 评论 -
递归算法--斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 很容易我们想到使用递归求解:public class Solution { public int Fibonacci(int n) { if(n == 0) return 0; if(n == 1) ...原创 2018-07-27 15:35:09 · 65555 阅读 · 5 评论 -
卡特兰数
问题引出若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列()问题分析 卡特兰数卡特兰数是一种经典的组合数,经常出现在各种计算中,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, ...转载 2018-07-27 15:17:15 · 244 阅读 · 0 评论