leetcode&&杂七杂八的机试题&&算法
一位美女
这个作者很懒,什么都没留下…
展开
-
leetcode239.滑动窗口最大值(单调队列或堆)
题目给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3原创 2021-03-29 21:30:39 · 199 阅读 · 0 评论 -
leetcode347.前k个高频元素(哈希 堆)
思路题目最终需要返回的是前 k 个频率最大的元素,可以想到借助堆这种数据结构,对于 k频率之后的元素不用再去处理,进一步优化时间复杂度。具体操作为:借助 哈希表 来建立数字和其出现次数的映射,遍历一遍数组统计元素的频率维护一个元素数目为 k的** 最小堆**每次都将新的元素与堆顶元素(堆中频率最小的元素)进行比较如果新的元素的频率比堆顶端的元素大,则弹出堆顶端的元素,将新的元素添加进堆中最终,堆中的 k 个元素即为前 k个高频元素时间复杂度代码class Solution {p原创 2021-03-29 19:25:07 · 200 阅读 · 0 评论 -
王道_例11.6畅通工程续(dijkstra 构造邻接图)
个人做这题的一些总结构建邻接表的方式构建边的结构体Edge,包含to和length:struct Edge{ int to; int length; Edge(int t,int l):to(t),length(l){}};由于输入是:点a,点b,长度d(表示a到b之间有一条长为d的路),是一个无向图,固有:vector<Edge>graph[MAXN];//邻接表实现图 定义cin>>from>>to>>length;//因为这原创 2021-03-20 20:34:19 · 130 阅读 · 0 评论 -
王道_例11.4畅通工程(Kruskal)
最小生成树在一个无向连通图,如果存在一个连通子图包含原图所有顶点和部分边,且子图不存在回路,就称这个子图为原图的一颗生成树。在带权无向连通图,所有生成树中边权的和最小那颗称为最小生成树。Kruskal步骤如下:初始时所有顶点属于孤立的集合按照边权递增遍历所有的边,若得到的边的两个顶点分别属于不同的集合,则将两个点合并到一个集合中,且该边为最小生成树上的一条边遍历完后,如果原图连通,则被选取的边和点构成了最小生成树;否则,最小生成树不存在。关键代码:int Kruskal(int n,in原创 2021-03-20 18:14:34 · 83 阅读 · 0 评论 -
王道_例11.3is it a tree(并查集)
题目A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more nodes connected by directed edges between nodes satisfying the following properties.There is exactly one node, called the root, to which no dire原创 2021-03-20 13:42:25 · 181 阅读 · 0 评论 -
王道_例11.2判断连通图(并查集)
并查集在连通图上的应用连通图定义:在无向图G中,若顶点u到顶点v有路径相连,称u和v是连通的。若图中任意两点是连通的,图被成为连通图。连通分量:无向图G中的一个极大连通子图称为G的一个连通分量,连通图只有一个连通分量,即自身。思路不断合并图中边相连的两个点所属的集合,最后计算出集合的个数就是连通分量的个数。连通分量为一则为连通图。代码//判断无向图是否为连通图#include <iostream>using namespace std;const int MAXN=1000;原创 2021-03-19 17:10:09 · 699 阅读 · 0 评论 -
王道_例11.1畅通工程(并查集)
题目某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?Input测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。注意:两个城市之间可以有多条原创 2021-03-18 22:00:48 · 125 阅读 · 0 评论 -
王道——判断两个序列是否为同一二叉搜索树
输入:输入两个字符串,注意每个数字0~9思路:建树之后,对两个树前序遍历+中序遍历,前序遍历结果相同并且中序遍历结果也相同,说明为同一个二叉搜索树代码://判断两序列是否为同一二叉搜索树序列 、//输入字符串,每个数字0~9 #include <iostream>#include <string>#include <vector>using namespace std;struct TreeNode{ int data; TreeNode* left原创 2021-03-18 20:05:34 · 368 阅读 · 0 评论 -
王道_例10.2二叉排序树
二叉排序树又称二叉搜索树。特征:左子树非空,左子树上所有节点关键字值<根节点关键字的值。右子树非空,右子树上所有节点关键字值>根节点关键字的值。左右子树本身也是二叉排序树。二叉树中序遍历,结果是升序的题目给N个关键字值不同的节点,按顺序插入初始为空的二叉排序树。插入成功后,输出父节点的关键字的值,没有父节点输出-1.样例输入:52 5 1 3 4样例输出:-12253代码关键函数:一直调用insert函数递归,知道到了合适的位置,此时root为NULL原创 2021-03-18 09:35:45 · 491 阅读 · 0 评论 -
王道_例10.1二叉树遍历(清华复试题)
题目先输入一串先序遍历的字符串,根据此字符串建立一棵二叉树。如输入先序遍历字符串ABC##DE#G##F###,#表示空格,空格字符串代表空树。建立好树后,在对二叉树中序遍历输出结果。总结树的结构体struct TreeNode{ char data; TreeNode* leftChild; TreeNode* rightChild; //表示初始化支持TreeNode(c),即data的值为c,left和right为NULL TreeNode(char c):data(c),l原创 2021-03-15 20:57:01 · 131 阅读 · 0 评论