算法总结
jcsyl_mshot
点滴生活,水落石出。
展开
-
生成树代码
树结构在业务开发中时常遇到,本文将详细实现一个树结果的生成。 1、 定义数据结构 本文首先定义主题结构,每个主题自己的主题信息、负责人、孩子节点等 public class SubjectDto implements Comparable { /** * 自增id */ protected Long id; /** * 创建时间 * */ protected Lon...原创 2020-01-08 21:39:20 · 1188 阅读 · 0 评论 -
大数据
哈希函数又叫散列函数,输入域可以是很大的范围,输出域是固定范围。(MD5) Map-Reduce 1.map 阶段 :将大任务分为子任务 2.reduce 阶段:子任务并发处理,然后合并结果 常见海量处理题目关键: 1.分而治之,通过哈希函数将大任务分流到机器,或分流到小人物。 2.常用到hashmap 或则bitmap 1.请对十亿个IPV4的IP地址进行排序,每个ip只出现一次 ...原创 2018-06-10 16:37:12 · 328 阅读 · 1 评论 -
概率
往往出现概率、期望的计算。 通常利用古典概率进行计算。 1.8只球队,有三个强队,其余都是弱队,随机把他们分为4组,每组两个队,问两强相遇的概率。 思路:组成四个队伍方法数:任选一个队伍分别有 7种选择对手的方式,在选一个队伍 有5种选择队友方式…:7*5*3*2 两强不相遇的概率:三支强队分别先占三组,选择对手的方式方式:5*4*3。 所以相遇的概率:3/7 ...原创 2018-06-08 20:22:05 · 670 阅读 · 1 评论 -
二叉树
递归二叉树:请用递归方式实现二叉树的先序,中序,后序遍历 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; class T...原创 2018-06-07 17:19:00 · 368 阅读 · 0 评论 -
排列组合
1.6*9 的方格中,左上角为起点,右下角为终点,每次只能向下或则向右走。 思路:一共走13步,其中五步向下,8步向右,因此可以看成从13个位置中选择5个位子的排列组合数:C5/13 或则 C8/13。 2.ABCDEFG 七个人站队,A必须B左边,不要求相邻。如果相邻多少种排法。 思路:第一种,A在B 左边和右边概率相等。故 7!/2 第二中,AB可以看成一个人。故6...原创 2018-06-07 21:53:43 · 427 阅读 · 1 评论 -
位运算
位运算的常见操作符: 按位与:& 按位或:| 按位异或:^ 取反:~ 左移右侧补零:<< 右移左侧补符号位:>> 右移左侧补零:>>> 网页黑名单系统,垃圾邮件过滤系统,容忍失误率对空间要求严格。布隆过滤器。 布隆过滤器:精确代表一个集合,使用很少的空间。布隆过滤器的bitarray的大小m根据样本数量n,失误率p原创 2018-06-07 20:46:08 · 145 阅读 · 1 评论 -
二分搜索
只要每次去掉一半的数据都可以进行二分搜索,并不总是要求有序的。 局部最小值:给定一个无序数组arr,任意两个相邻的数不想等,求任意一个局部最小的位置。 class Solution { public: int getLessIndex(vector<int> arr){ if(arr.empty()) return -1; ...原创 2018-06-06 20:42:20 · 155 阅读 · 1 评论 -
链表
链表问题算法难度不高,考察实现代码能力 线性结构,分为单链表和双链表。 环形链表插入:有一个整数val,如何在一个有序的环形链表插入一个节点值为val 的节点,并且保证这个环形单链表依然有序。 思路:设置两个指针即可。 struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x)...原创 2018-06-06 20:11:14 · 220 阅读 · 1 评论 -
队列和栈
栈的基本操作 1.pop 操作 弹出顶元素 2.top 或则 peek 操作 查看顶元素 3.push 操作 进栈操作 4.size 操作 队列基本操作(一端进,一端出) 1.push 操作在队尾加入 2.pop 操作从队头弹出 图的遍历 深度优先遍历(DFS) 栈实现 宽度优先遍历 (BDF) 队列实现 最值栈:定义栈的数据结构,实现一个能够得到栈最小元素的Min 函...原创 2018-06-05 21:39:09 · 201 阅读 · 1 评论 -
字符串
变形词:对于两个字符串A和B,如果A和B中出现的字符种类相同且出现的每种字符次数相同,则A和B为变形词,判断两个字符串A,B 是否为变形词? Class Transform{ public : bool chkTransform(String A,int lena,string B,int lenb){ if(lena!=lenb) return ...原创 2018-06-05 19:29:38 · 155 阅读 · 1 评论 -
二叉树与字符串
二叉树按层遍历 1.针对二叉树的宽度优先遍历 2.宽度优先遍历常使用队列结构 3.面试中,常对换行有所要求 如每打印一层就需要进行回车换行操作再打印下一层: 思路:last:表示正在打印的当前行的最右节点 nlast:表示下一行的最右节点,每次入队列都会更新 struct TreeNode{ int val; struct TreeNode *left; st...原创 2018-06-05 18:09:46 · 803 阅读 · 1 评论