《剑指offer》总结一
1、二维数组中的查找(223ms)
题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
由于二维数组从左到右,从上到下都是有序依次增大,所以可以考虑,选取右上角或右下角。因为这两个位置有一个特点,都位于两边的数字中间。例如,右上角位置左侧都比其小,该位置下侧都比其大,因此挪动位置具有唯一性。左下角位置亦如此。
\(\color{green}{代码实现}\):二维数组的查找
2、替换空格(24ms)
题目描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:
从前往后替换,需要将空格后面所有字符的位置都后移两格,循环中嵌套判断和循环,时间复杂度为O(n*n);
从后往前替换,只需要提前计算字符串长度和空格的数目,每个空格使得字符串多出两个长度,然后逆序替换为新的字符串。具体过程为:
(1) 首先输入一个字符串,然后计算字符串长度和空格的数目,每个空格使得字符串多出两个长度,从而计算出新的字符串长度;
(2) 接着从后往前开始替换,第一个指针p1放在原字符串最后一个位置,第二个指针p2放在新字符串最后一个位置,同时向前移动,每当碰到空格的时候,指针p1向前移动1格,而指针p2向前移动3格,直到两个指针指向同一个位置,表明空格替换完毕,剩余字符一一替换即可。
\(\color{green}{代码实现}\):替换空格
3、从尾到头打印链表(22ms)
题目描述:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:
这是最后一个节点先输出,属于典型的“后进先出”,可以用栈来实现,每经过一个节点,把该节点放入到一个栈中,到遍历完整个链表的时候,再从栈顶开始逐个输出节点的值。
\(\color{green}{代码实现}\):从尾到头打印链表
4、重建二叉树(37ms)
题目描述:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
前序遍历:根节点->左子树->右子树
中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点
思路:
在函数ConstructCore中,我们先根据前序遍历的第一个数字创建根结点,然后在中序遍历中找到根结点的位置,这样就能确定左右子树节点的数量。在前序遍历和中序遍历中划分了左、右子树节点的值之后,我们就可以递归地调用函数ConstructCore去分别构建它的左、右子树。
\(\color{green}{代码实现}\):重建二叉树
5、用两个栈实现队列
题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
栈:常见的数据结构,后进先出,即最后被压入栈的元素会第一个被弹出。
队列:重要的数据结构,先进先出,即第一个进入队列的元素将会第一个出来。
思路:
假设两个栈为stackA和stackB。插入元素时,先将所有元素插入到stackA中,插入元素顺序为{1,2,3,4,5};
而当我们需要删除元素时,由于需要先删除1,因此,需要借助stackB,将stackA中的所有元素逐个弹出并压入stackB;
由于栈的结构是后入先出,因此这个时候栈B的元素依次为{5,4,3,2,1},即1变成了栈顶。然后我们让栈B中的所有元素依次弹出,就可以实现先入先出,即两个栈实现一个队列。
流程(删除一个元素):
当栈B不为空时,在stackB中的栈顶元素是最先进入队列的,因此可以弹出;
当栈B为空时,我们需要将stackA中的元素逐个弹出至stackB,然后再弹出stackB的栈顶元素。
\(\color{green}{代码实现}\):两个栈实现队列
参考:
- 《剑指offer》宝典神功
- 牛客网:https://www.nowcoder.com/ta/coding-interviews
《剑指offer》总结一的更多相关文章
- 剑指Offer面试题:1.实现Singleton模式
说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...
- 剑指Offer面试题:14.链表的倒数第k个节点
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...
- 《剑指offer》面试题12:打印1到最大的n位数
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
- 《剑指offer》面试题11: 数值的整数次方
面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...
- 剑指 Offer 题目汇总索引
剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格 ...
- 面试题目——《剑指Offer》
1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...
- 剑指offer习题集2
1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...
- 剑指offer习题集1
1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> ...
- 剑指Offer:面试题20——顺时针打印矩阵(java实现)
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
- 牛客网上的剑指offer题目
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...
随机推荐
- HDU 1848 Fibonacci again and again【博弈SG】
Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F( ...
- UVA 10318 Security Panel(DFS剪枝 + 状压 + 思维)题解
题意:给一个r*c的矩阵开关(初始全打开的),每次按下一个开关都会改变3*3范围内的有*的地方的状态,问你最少几步能让开关全闭上,按升序输出按哪些按钮 思路:每个按钮至多按一下,按按钮的顺序和结果无关 ...
- codeforce 886C Petya and Catacombs (map,思路)
突然发现百度不到这题的单独题解(果然是因为这是水题么),那我就来写一个了~ 先把题给贴了. C. Petya and Catacombs time limit per test 1 second me ...
- KNN——图像分类
内容参考自:https://zhuanlan.zhihu.com/p/20894041?refer=intelligentunit 用像素点的rgb值来判断图片的分类准确率并不高,但是作为一个练习kn ...
- BZOJ 1037: [ZJOI2008]生日聚会Party(区间dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1037 题意: 思路: 四维数组进行dp,dp[i][j][a][b]表示进行到第i个座位时已经有j个 ...
- C#——LINQ语句
委托: //delegate 返回值 委托名(参数); //委托不能在方法中定义 ////实例化委托,并赋值 //委托名 实例名 = new 委托名(函数名).lambda表达式; //使用委托实例, ...
- Android之使用传感器获取相应数据
Android的大部分手机中都有传感器,传感器类型有方向.加速度(重力).光线.磁场.距离(临近性).温度等. 方向传感器: Sensor.TYPE_ORIENTATION 加速度(重力)传感器: ...
- 把一个List拆分为几个大小一样的List
static void Main(string[] args) { List<String> tarArr = new List<String>(); tarArr.Add(& ...
- P2512 [HAOI2008]糖果传递
题目描述 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 输入输出格式 输入格式: 小朋友个数n 下面n行 ai 输出格式: 求使所有人获得均等糖果 ...
- win10常用命令和设置总结
1.常用命令 exit:退出cmd面板; cls:清除cmd面板; 2.常用设置 2.1 services.msc 禁用:以后怎样都不会运行;手动:是打开某些用到它的程序要用到该服务时才会运行; 自动 ...