剑指offer第四章 1.二叉树的镜像 二叉树的镜像:输入一个二叉树,输出它的镜像 分析:求树的镜像过程其实就是在遍历树的同时,交换非叶结点的左右子结点. 求镜像的过程:先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,交换它的两个子结点,当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像. /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val…
题目:从上往下打印二叉树的每一个节点,同一层的节点按照从左到右的顺序打印 思路:这是一个层序遍历的问题,因此要借用到队列.我们可以在打印第一个节点的同时将这个节点的左右子节点都放入队列,同样打印左右子树. 抽象的问题具体化: C++代码: #include<iostream> #include<deque> using namespace std; struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; Bina…
题目:输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否为弹出序列. 思路:定义两个指针sPush和sPop分别指向两个整数序列的开头,借助一个辅助的栈,将第一个序列的数据依次压入栈中,直到压入栈中的数据和第二个栈中sPop所指向的数据相等,就将这个数据弹出栈.sPop指向下一个数字.重复上述过程.直到sPop等于序列的长度并且栈为空. 将抽象的问题具体化的过程如下: C++代码: #include<iostream> #include<stack> bool is…
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,调用min,push及pop的时间复杂度都是O(1) 思路:定义两个栈分别为dataStack和minStack,dataStack用来存放要放入栈中的数据,而minStack用来存放dataStack中的对应时刻的最小值. 抽象问题具体化:如下图所示: C++代码: #include <stack> #include <assert.h> #include <stddef.h> t…
题目:输入一个矩阵,按照从外向里的顺序依次打印出每一个数.(画图让抽象的问题形象化) 思路:打印矩阵时,把每一层当做一个圈来打印,找到打印整个矩阵的截止条件. 从上图中我可以看到一个6*6的矩阵(长宽分别为cloums,rows)最后一圈的最左边的顶点上面的坐标为(2,2),我们同时发现在一个5*5的矩阵中最后一圈的最左边的顶点的坐标也为(2,2),并且这个顶点的坐标的横坐标和纵坐标是相同的暂且设置为(start,start),因此我们可以得到截止条件即为,cloums>startX*2,row…
题目:请完成函数,输入一个二叉树,该函数输出它的镜像. 思路:可能没有听说过书的镜像,但是可以通过画图等来找灵感.就像照镜子一样,人的左边和右边交换了. 如图: 通过如下图变化就可以由左图得到右图: 总体来说:将所有的非叶子节点的左右子树交换.由于交换的过程惊人的一直,因此可以采用递归. C++代码: #include<iostream> using namespace std; struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_p…
一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min.push以及pop三个方法: public class MinInStack<T> where T : struct { private Stack<T> dataStack; private Stack<T> minStack; public MinInStack()…
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 在该栈中,调用min,push,pop的时间复杂度都是O(1) 思路: 1.除了原来的栈s,增加一个辅助栈s_min,用来保存每次进栈时的最小元素. Push操作: 栈s:元素value直接进栈s: 栈s_min:判断s_min是否为空或者value是否小于s_min的栈顶元素,如果是,将value压入栈s_min,否则将s_min.top()压入栈s_min: Pop操作: 栈s:s.pop(): 栈s_min:s…
思路: 通过增加一个辅助栈保存每个状态对应的最小值.栈实现的不完整,应该还包含empty()等常规函数. #include <iostream> #include <stack> using namespace std; template <typename T> class StackWithMin { public: void push(const T& value); void pop(); T getMin(); private: stack<T&…
#include"iostream" #include"stdio.h" using namespace std; ; ; template<typename T>class StackWithMin { public: void push(const T& value); void pop(); T min(); private: ; int minNum=INF; T* mData=new T[MAXN]; T* mMin=new T[MAX…
剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在则输出0. 分析: 思路1:数组排序,排序之后中间的数字一定是出现次数超过数组长度一半的数字,也就是统计学上的中位数,即长度为n的数组中第n/2大的数字(数组中任意第k大的数字) class Solution { public: int Mor…
剑指offer第七章&第八章 1.把字符串转换成整数 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 分析:思路在代码里已经体现 class Solution { public: int StrToInt(string str) { if(str.empty()) ; ;//正负号初始化为1表示正数 ] == '-')…
剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1:直官思路:直接顺序扫描,O(n) class Solution { public: int GetNumberOfK(vector<int> data ,int k) { ; ;i<data.size();i++) { if(data[i]==k) count++; } return co…
剑指offer第三章 1.数值的整数次方 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution { public: bool g_InvalidInput=false; double Power(double base, int exponent) { g_InvalidInput=false; ) { g_InvalidInput=true; return 0.0; } unsigned int absEx…
剑指Offer--美团内推+校招笔试题+知识点总结 前言 美团9.9内推笔试.9.11校招笔试,反正就是各种虐,笔试内容如下: 知识点:图的遍历(DFS.BFS).进程间通信.二叉查找树节点的删除及中序遍历.HTTP会话的4个过程.红黑树.1024!有多少个0,60块糖分给5个人,如何分等.编程题考察拿红包.多叉树(见下图). 另外,更变态的是其IDE编程居然在多行输入问题上死翘翘了,基本上就是纠结于到底如何实现多行输入,结果就挂了!整理后的多行输入如下: package cn.edu.ujn.…
剑指Offer--网易校招内推笔试题+模拟题知识点总结 前言 2016.8.2 19:00网易校招内推笔试开始进行.前天晚上利用大约1小时时间完成了测评(这个必须做,关切到你能否参与面试).上午利用2小时时间做了下模拟题,模拟题中编程题占用时间比较多,可以先在自己电脑中的IDE编程测试.待测试完成后再将代码拷贝至OJ,运行所给测试案例.考察的知识点范围比较广泛,设计操作系统,Linux.java多线程.网络编程等.模拟题主要考查知识点如下(可能存在遗漏某些知识点的情况): 1.求给出叶子节点时哈…
剑指Offer--联通研究院笔.面试题 1.二叉树适宜存储什么样的数据? 树最适合用来表示( C ). A.有序数据元素 B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 2.数据库中多表查询.增加数据字段值: 3.进程的定义.主要特征.最基本的特征:   进程是指在系统中能独立运行并作为资源分配的基本单位,是由一组机器指令.数据和堆栈组成的,是一个能独立运行的活动实体.  基本特征: 动态性:动态产生.动态消亡: 并发性:同其它进程并发执行: 独立性:独立运行的活…
剑指Offer学习 剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退.只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代码下载[https://github.com/Wang-Jun-Chao/coding-interviews] 目录 第01-10题 [剑指Offer学习][面试题02:实现Singleton 模式——七种实现方式] [剑指Offer学习][面试题03:二维数组中的查找] [剑指Offer学习][面…
本题来自<剑指offer> 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体化. C++ Code: class Solution { private: stack<int> m_data; //数据栈 stack<int> m_min; //辅助栈,存放较小的数据 public: void push(int value) { m_data.push(valu…
剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数.接下来有n行,每行开始有一个字母Ci.Ci=’s’时,接下有一个数字k,代表将k压入栈.Ci=’o’时,弹出栈顶元素. 输出: 对应每个测试案例中的每个操作,若栈不为…
剑指Offer(二十):包含min函数的栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baidu_31657889/ github:https://github.com/aimi-cn/AILearners 一.引子 这个系列是我在牛客网上刷<剑指Offer>的刷题笔记,旨在提升下自己的算法能力. 查看完整的剑指Offer算法题解析请点击:剑指Offer完整习题解析 二.题目 定义栈的…
剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里面的值都是有序的,值最小的放在栈顶. 此外,第二个栈出栈的处理有点难以理解,它是只有当栈顶元素和第一个栈的栈顶元素相同时才会出栈一个元素. package com.walegarrett.offer; import java.util.Stack; /** * @Author WaleGarrett…
剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(…
题目 剑指 Offer 30. 包含min函数的栈 思路1 使用一个辅助栈min_stack,用来维护栈的最小的元素 每次添加元素入栈时候,data_stack和min_stack都要同时维护 data_stack按照正常的栈压入和弹出顺序,但是min_stack栈不一样,因为要能获取当前栈的最小元素: 如果栈是空的,直接入栈 如果栈不是空的,分两种情况: 待入栈的元素x小于min_stack栈顶的元素,此时直接将x压入min_stack栈 待入栈的元素x大于min_stack栈顶的元素,此时将…
[剑指Offer]包含min函数的栈 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593?orderByHotValue=1&page=1&onlyReference=false 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 解题方法 需要用一个保存最小数值的辅助栈. # -*- coding:utf-8 -…
剑指Offer30--包含min函数的栈 1. 题目简述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用min.push及pop的时间复杂度是O(1). 2. 题目分析 一个普通的栈push及pop操作时间复杂度均为O(1),但寻找最小元素的复杂度则为O(n).关键之处就在于如何把寻找最小元素操作min的复杂度减小为O(1).在这里我们采用双栈的解法,栈A与普通栈无异,栈B则存储栈A中非严格降序元素.由于栈B内元素是递降的,而其是从栈A全部元素依次筛选出来的…
题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 首先定义一下链表中的节点,关于链表这个数据结构在另外一篇文章中会详细讲 function ListNode(val) { this.val = val; this.next = null; } 理清一下思路,我们要反转一个链表,可以遍历链表,将链表中的元素存到一个数组中,然后按照反转的顺序保存 好了,思路清晰了,那我们当然是要用栈这个数据结构,要记住,在改变顺序或者操作数组的时候,是和栈分不开的 var reservep…
为春招实习做准备,记录一下<剑指Offer>里面的面试题 第二章 面试题3:数组之中的重复数字. 这个题吧,虽然不难,但是不知道为什么就是看了很久,可能很久没有做算法题了.最后面一句话说的挺好的,给你出题之后,要问清楚题目,以及要求,时间效率优先还是空间效率优先,虽然我一般都会选择时间效率优先,因为内存现在都比较大了. 题目很简单,一个长度为n的数组,数字都在0~n-1,找出其中任意一个重复的数字,注意是任意一个. 书中讲到了三个算法: 1.时间复杂度是O(n),空间复杂度也是O(n) 遍历数…
题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这种顺序.解决方案二:栈的本质就是递归,直接使用递归的方式,打印一个节点的时候先打印它后面的节点,再打印该节点自身,实现反向打印解决方案三:遍历链表,把链表中的元素复制到ArrayList中,然后逆序打印ArrayList中的元素解决方案四:前三种解决方案本身属于在打印链表的时候不修改链表本身结构,在允许修改链…
剑指Offer学习 剑指Offer这本书已经学习完了.从中也学习到了不少的东西,如今做一个总的文件夹.供自已和大家一起參考.学如逆水行舟.不进则退.仅仅有不断地学习才干跟上时候.跟得上技术的潮流! 全部代码下载[https://github.com/Wang-Jun-Chao/coding-interviews] 文件夹 第01-10题 [剑指Offer学习][面试题02:实现Singleton 模式--七种实现方式] [剑指Offer学习][面试题03:二维数组中的查找] [剑指Offer学习…