剑指offer
YenKoc
最弱CTFer,博客已搬到博客园去了,csdn不再更新,希望别真香
展开
-
剑指offer 1-5
二维数组中的查找 题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路分为两种: 1.暴力两重遍历,挺好,一遍直接过了 2.根据题目所给出的有序性来快速定位我们想找的那个数,先找到行,再找到列 贴上 ...原创 2020-02-01 11:08:27 · 154 阅读 · 0 评论 -
剑指offer 数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路分析: 本质上都是要在插入数字后,进行排序,之后再进行判断总个数是偶数还是奇数,算出中位数。 一....原创 2020-01-28 19:15:19 · 170 阅读 · 2 评论 -
剑指offer 37-42
37. 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路: 1.平衡二叉树的定义为,当为空树或左右子树高度小于等于1,同时左右子树都要为平衡二叉树。 2.先分别求出左右子树的高度,比较高度差,如果高度差大于1,直接返回false,如果高度不大于1,那么则递归判断左右子树是否为平衡二叉树。 代码贴下: class Solution { public: int getDepth(Tre...原创 2020-01-23 22:27:32 · 115 阅读 · 0 评论 -
剑指offer 数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出 思路分析: 假设一个数字出现的次数超过了数组长度的一半,那么排完序后,肯定要在数组的中间,再去不断遍历比较,判断数字最多的数是不是超过了一半长度,有点上次华东交大的平均数那题的...原创 2020-01-23 00:02:33 · 118 阅读 · 0 评论 -
剑指offer 丑数
题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 思路分析: 1.由题目可知,丑数由2,3,5构成,丑数的格式为2^x * 3^y * 5^z,那么丑数也就是由另外一个丑数乘以2,3,5得来的. 2.1为初始的丑数,乘以2,3,5后,2,3,5都为丑数...原创 2020-01-22 23:57:10 · 163 阅读 · 0 评论 -
剑指offer 第一个只出现一次的字符
题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写) 思路分析: 1.创建一个数组来存储次数,初始话为零 2.将每个字符的ascii值作为数组的下标,遍历一遍,如果遇到就加一。 3.再遍历一遍,将次数为一的返回,否则返回-1; 代码如下: class Solution { ...原创 2020-01-22 23:46:39 · 109 阅读 · 0 评论 -
剑指offer 复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路分析: 1.遍历链表,将复制的新节点放在对应旧节点的后面 2.因为新节点都是在对应旧节点的后面,那么旧节点对应的random指针,同样被复制了一份新的指针,放到了旧...原创 2020-01-22 11:32:31 · 140 阅读 · 0 评论