算法----数据结构
sunlanchang
北京邮电大学-计算机硕士,sunlanchang@bupt.edu.cn
展开
-
LeetCode 406. 根据身高重建队列
Description假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com原创 2020-11-16 16:45:15 · 153 阅读 · 0 评论 -
LeetCode 剑指 Offer 09. 用两个栈实现队列
Description用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","a原创 2020-06-30 15:26:16 · 167 阅读 · 0 评论 -
LeetCode 297. 二叉树的序列化与反序列化(层次遍历)
Description序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例: 你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为 "[原创 2020-06-17 22:29:23 · 233 阅读 · 0 评论 -
面试金典 03.04. 化栈为队
Description实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作 --...原创 2020-03-02 22:05:02 · 293 阅读 · 0 评论 -
Leetcode 155. 最小栈
Description设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.p...原创 2019-10-24 16:50:37 · 140 阅读 · 0 评论 -
剑指offer 二叉搜索树的第k个结点(中序遍历)
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。Solutionclass Solution: # 返回对应节点TreeNode def KthNode(self, pRoot, k): node = pRoot stack = [] ...原创 2019-10-23 20:17:26 · 384 阅读 · 0 评论 -
剑指offer 滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...原创 2019-10-23 14:59:54 · 158 阅读 · 1 评论 -
剑指 offer 两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。Solution# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): ...原创 2019-07-16 17:37:22 · 188 阅读 · 0 评论 -
Leetcode 83. 删除排序链表中的重复元素
描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3Solution# Definition for singly-linked list.# class ListNode:# def _...原创 2019-07-12 15:29:12 · 93 阅读 · 0 评论 -
Leetcode 160. 相交链表(快慢指针)
描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,...原创 2019-07-12 15:49:57 · 293 阅读 · 0 评论 -
剑指 offer 树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)Solution注意分析时将树画出None节点以便于分析和测试。class Solution: def HasSubtree(self, pRoot1, pRoot2): result = False if pRoot1 is not None and...原创 2019-08-16 15:44:42 · 160 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
Description定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。Solution使用辅助栈保存最小的元素,每次入栈同时将最小元素入辅助栈。# -*- coding:utf-8 -*-class Solution: def __init__(self): self.minElmt = float('inf'...原创 2019-08-17 09:57:48 · 128 阅读 · 0 评论 -
剑指offer 二叉树中和为某一值的路径
题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)SolutionDFS找路径,注意进入递归前空指针的判断。class Solution: def __init__(self): self.ans = []...原创 2019-08-17 17:07:24 · 92 阅读 · 0 评论 -
剑指offer 对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。class Solution: def isSymmetrical(self, pRoot): if pRoot is None: return True return self.symmetry(pRoot.le...原创 2019-09-05 15:35:56 · 80 阅读 · 0 评论 -
剑指offer 序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到...原创 2019-09-05 17:05:31 · 83 阅读 · 0 评论 -
Leetcode 203. 移除链表元素
描述删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5Solution注意python中的and oclass Solution: def removeElements(self, head, val) : ...原创 2019-09-16 16:04:32 · 91 阅读 · 0 评论 -
Leetcode 104. 二叉树的最大深度
描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。Solution# Definition for a binary tree node.# class TreeNo...原创 2019-07-11 16:39:45 · 195 阅读 · 0 评论 -
Leetcode 203. 移除链表元素
描述删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5Solution注意python中的and or操作符的返回值。class Solution: def removeElements(self, head, val) ...原创 2019-07-11 16:37:33 · 124 阅读 · 0 评论 -
HDU 1237 简单计算器(栈的中缀表达式求值)
Description读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。Output对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。Sample Input1 + 24 ...原创 2019-01-08 21:05:58 · 853 阅读 · 0 评论 -
牛客网 计算表达式 (栈的中缀表达式求值)
题目描述对于一个不存在括号的表达式进行计算输入描述:存在多种数据,每组数据一行,表达式不存在空格输出描述:整形数据输入6/2+3+3*4输出18Solution中缀求值板题#include <stack>#include <cstdio>#include <iostream>using namespace std;char str...原创 2019-01-08 21:31:46 · 560 阅读 · 0 评论 -
牛客网 哈夫曼树 (大根堆、哈夫曼树)
输入描述:输入有多组数据。每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2&lt;=n&lt;=1000)。输出描述:输出权值。输入51 2 2 5 9输出37Solution哈弗曼树板题。注意默认优先队列为大根堆,小根堆用priority_queue&lt;int, vector&lt;int&gt;, greater&lt;int&gt;&a原创 2019-01-08 22:04:49 · 467 阅读 · 0 评论 -
HDU - 1710 Binary Tree Traversals (二叉树前中序得到后序)
Description给定前中序得到后序序列。Input第一行包含一个n(1&lt;=n&lt;=1000)表示有n个节点,后两行为前序和后序序列。Output输出后序序列。Sample Input91 2 4 7 3 5 8 9 64 7 2 1 8 5 9 3 6Sample Output7 4 2 8 9 5 6 3 1Solution由前中、后中得到其他序列的板题...原创 2019-01-09 11:42:50 · 237 阅读 · 0 评论 -
牛客网 二叉树遍历 (前中序求后序)
题目描述二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树; 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树; 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。 给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。输入描述:两个字符串,其长度n均小于...原创 2019-01-09 12:01:50 · 855 阅读 · 0 评论 -
牛客网 二叉排序树 (输出前中后序)
题目描述输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。输入描述:输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。输出描述:可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。输入中可能有重复元素,但是输出的二叉树遍历序列中...原创 2019-01-09 15:39:16 · 881 阅读 · 0 评论 -
牛客网 二叉排序树 (比较前中序)
题目描述输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。输入描述:输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。输出描述:可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。输入中可能有重复元素,但是输出的二叉树遍历序列中...原创 2019-01-09 20:18:09 · 346 阅读 · 0 评论 -
PAT A1032 Sharing(静态链表)
Description给定连个单词,判断两个单词相同后缀的位置。Input第一行start1 start2 N,其中start1第一个单词地址,start2为第二个单词地址,N为一共N个节点。Sample Input 1:11111 22222 967890 i 0000200010 a 1234500003 g -112345 D 6789000002 n 0000322...原创 2019-02-10 12:10:17 · 256 阅读 · 0 评论 -
PAT A1052. Linked List Sorting(链表排序、静态链表)
Description给定一个链表,给链表排序。起始地址和下地址为整形数字。输出排序后的链表。Sample Input:5 0000111111 100 -100001 0 2222233333 100000 1111112345 -1 3333322222 1000 12345Sample Output:5 1234512345 -1 0000100001 0 11111...原创 2019-02-10 22:36:11 · 241 阅读 · 0 评论 -
PAT A1020 Tree Traversals(中后序输出层序、板题)
Description给定一个二叉树的中序序列和后序序列输出层序序列。Sample Input:72 3 1 5 7 6 41 2 3 4 5 6 7Sample Output:4 1 6 3 5 7 2Solution如图所示确定中序和后序的边界。层次遍历采用广度优先搜索即可。#include &lt;queue&gt;#include &lt;iostream&gt;...原创 2019-02-11 14:53:52 · 222 阅读 · 0 评论 -
牛客网 树查找(层序遍历、北邮机试)
题目描述有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。输入描述:输入有多组数据。每组输入一个n(1&lt;=n&lt;=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。输出描述:输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。示例1输入41 2 3 42输出2 3Solution完全二...原创 2019-02-20 20:07:46 · 217 阅读 · 0 评论 -
牛客网 二叉树遍历(先序建立二叉树、清华机试)
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍...原创 2019-03-02 10:25:48 · 594 阅读 · 0 评论 -
Leetcode 21. 合并两个有序链表
描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4Solutionclass Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode)...原创 2019-07-09 15:56:53 · 72 阅读 · 0 评论 -
Leetcode 110. 平衡二叉树
描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]...原创 2019-07-15 15:41:40 · 92 阅读 · 0 评论 -
Leetcode 237. 删除链表中的节点
描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输...原创 2019-07-15 16:25:19 · 91 阅读 · 0 评论 -
HDU 5479 Scaena Felix(栈的括号匹配)
description给定左括号和右括号的字符串,输出左右括号匹配成功的个数。Input第一行一个整数T,代表有T个用例。每个用例只包含‘(’和‘)’,字符串S的长度:1≤|S|≤1,000。Output输出匹配成功个数。Sample Input3()(((((())Sample Output102solution栈的应用板题。注意将栈和字符串声明为局部变量,若设...原创 2019-01-08 19:20:31 · 329 阅读 · 0 评论