![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
一米阳光 zs
这个作者很懒,什么都没留下…
展开
-
剑指offer--判断规则二维数组是否存在一个指定数
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:从左至右递增、从上至下在递增 可以以左下角的那个元素为起点,指定个元素与其相比较,做相应移动class Solution {public: bool Find(int targe原创 2017-03-11 20:31:09 · 1220 阅读 · 0 评论 -
链表面试题之链表逆置、指定前k个逆置
单链表逆置我们大概很熟悉,但对于链表前k个逆置,可能不大常见,这是一道链表逆置的变种,其中变种的还有链表倒数第k个、链表k个组成一组,组内逆置,在这里我给大家分享一下我的想法。对于单链表的逆置有两种方法可以实现:(1)利用辅助指针基本思想:在遍历结点过程中,设置辅助指针,用于记录先前遍历的结点。这样依次编译的过程中只需修改其后继结点的next域即可。typedef int原创 2017-07-26 20:17:26 · 1004 阅读 · 0 评论 -
二叉树面试题之二叉树镜像
首先分析,互为镜像,也就是说,一个节点的左右子树互相交换位置,因此采用递归的方法较为简单,且方便理解,即镜像步骤:1)、交换根结点的左右子树节点。2)、交换左子树(以图中10为例)的左右节点。三、交换右子树(以图中6为例)的左右结点。总结上面过程,一颗树的镜像过程:先前序遍历树的每个节点,如果遍历到节点有子节点,就交换它的两个子节点,当交换完所有非叶子节点的左右子节点之后,就得到了原创 2017-07-26 19:06:09 · 464 阅读 · 0 评论 -
剑指offer--递归非递归合并两个有序链表
面试题:合并两个有序链表,合并之后需要变为有序对于此题,我想到的有两种解法:递归和非递归递归实现://递归Node *MergeList(Node *pHead1, Node*pHead2){ if (pHead1 == NULL) return pHead2; else if (pHead2 == NULL) return pHead1; else {原创 2017-07-13 23:09:26 · 895 阅读 · 0 评论 -
剑指offer---复杂链表复制
剑指offer面试题---复杂链表复制分析此题:1.首先要将链表的每一个节点复制一份,连在被复制节点后面。 2.将对应的指向关系也对应复制。 3.分离原链表、复制链表。代码实现:struct ComplexListNode{ int _data; ComplexListNode* _next;原创 2017-07-13 23:25:37 · 745 阅读 · 0 评论 -
剑指offer--据前序和中序遍历重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析:此时不由得想起前序遍历的顺序是根--左--右#include #include #include using namespace st原创 2017-03-16 18:55:18 · 782 阅读 · 0 评论 -
剑指offer--指定链表逆序打印
题目:输入一个链表,从尾到头打印链表每个节点的值。 首先分析这个题,如果面试官没有指定说明不允许改变链表结构,首先会想到的是将链表的头部和指针方向改变,但如果面试官说了不能改变链表结构,就得考虑别的方法,此刻你有没有想到一种结构先进后出,对没错,就是栈,如果将链表顺序遍历一遍,将链表中的元素一一PUSH进栈中,然后再将数据一个个拿出来访问,此刻,顺序就逆置了,然而还有优化原创 2017-03-14 22:58:20 · 717 阅读 · 0 评论 -
剑指offer--调整数组顺序使奇数位于偶数前面
面试题:调整数组顺序使奇数位于偶数前面当拿到这个题目,你首先会想到的是遍历这个数组每碰到偶数时,拿出这个数字与其后的数字交换,但这样的话其时间复杂度为O(n*n)若面试官没有时间复杂度的要求,那么这样就可以了但是往往不能体现出你的能力,你还可以优化,我们可以维护两个指针, 1)原创 2017-04-16 20:33:26 · 1438 阅读 · 0 评论 -
剑指offer--o(1)时间删除链表结点
面试题:在O(1)时间删除链表结点 最常规的想法无非是遍历这个链表,然后删除该结点,但查找的时间复杂度是o(n)显然不符合题目要求估计接触过链表的都会知道常规链表的删除方法,解题思路: 1) 删除节点i之前,先从链表的头节点开始遍历到i前面的一个节点h,再把h的next指向i的下一个节点,删除节点i,记住要把指针置为空,在这要考虑的问题有很多原创 2017-04-16 20:55:43 · 466 阅读 · 0 评论 -
继承,菱形继承,多态,虚继承、菱形虚拟继承
面的代码主要写了关于:(1).继承和派生的关系(2).6个默认函数的继承(拷贝,拷贝构造,赋值,析构,...)(3).普通菱形继承(4).多重虚继承(5).多态(6).虚表(7).虚菱形继承 其中涉及到了很多C++中的内容,如,, 等等#ifndef INHERIT_H_ #define INHERIT_H_ #include #inclu转载 2017-04-16 21:42:02 · 781 阅读 · 0 评论 -
剑指offer--两个栈实现一个队列
题目:两个栈实现一个队列分析:方法一: s1是入栈的,s2是出栈的。入队列,直接压到s1是就行了出队列,先把s1中的元素全部出栈压入到s2中,弹出s2中的栈顶元素;再把s2的所有元素全部压回s1中缺点:有大量元素要push和pop,效率不高方法二: s1表示入队的,s2表示出队列的,保证所有元素在一个栈中 入队列:如果s原创 2017-03-16 21:30:36 · 761 阅读 · 0 评论 -
查找一个字符串中第一个只出现两/一次的字符
题目:查找一个字符串中第一个只出现两/一次的字符一、查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)。分析问题:方法1、O(N^2) 看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果后面出现两次该字符,那原创 2017-07-26 20:47:39 · 1603 阅读 · 0 评论