剑指offer
MaxineZhou
Don't forget try again
展开
-
剑指offer面试题42:翻转单词顺序VS左旋转字符串
一、题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?二、分析1....原创 2020-03-15 10:13:00 · 223 阅读 · 0 评论 -
剑指offer面试题17:合并两个有序链表——递归——链表的有条件移动
一、题目分析这是一个递归的过程,每次都是链表剩余部分的第一个结点相比较,小的那个就放到新链表中;思考:如果题目改成把可以将3整除的结点放到前边呢?只需要把判断条件写成一个功能函数就可以了二、代码分析注意如果不对输入的空链表参数加以判断,会造成程序奔溃/*struct ListNode { int val; struct ListNode *next; ListNo...原创 2020-03-05 22:52:34 · 136 阅读 · 0 评论 -
剑指offer面试题14:使数组中奇数在偶数前边——数组的有条件移动
方法一:新建一个数组,遍历给出的数组,若是奇数则加入新数组,再遍历一边数组若是偶数则加入新数组#include<bits/stdc++.h>class Solution {public: void reOrderArray(vector<int> &array) { vector<int> arr; in...原创 2020-03-05 21:07:46 · 133 阅读 · 0 评论 -
剑指offer面试题16:链表的反转并返回反转后的首结点
方法一:把节点放入栈中,由于栈是先进后出,所以出栈的顺序正好是反序的/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListN...原创 2020-03-03 18:33:19 · 212 阅读 · 0 评论 -
剑指offer面试题13、15:O(1)时间删除链表结点、返回链表中倒数第k个结点、判断链表是否有循环
方法一:把链表结点放入数组中/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, uns...原创 2020-03-03 14:11:09 · 158 阅读 · 0 评论 -
剑指offer面试题11:数值的整数次方——全面又高效的代码
1.题目分析题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0——情况讨论:1.base可能为0,此时是选择返回值、设置全局变量还是设置异常要根据面试官而定2.exponent也可能小于0,此时需要取它的绝对值,并且对取绝对值求整数次方的结果取倒数2.解决方法1....原创 2020-02-27 11:36:06 · 200 阅读 · 0 评论 -
剑指offer面试题4:字符串替换——原地从后往前替换
1.题目字符串替换要求:将所有字符串中的空格换成%20,如“how are you”要换成"how%20are%20you"2.解法解法一:从前到后复制:时间复杂度为O(n^2)的解法,从前都后原地复制字符串,由于是原地复制,所以在计算好新字符串长度之后,从前到后复制就要求原字符串中有一个空格,空格后面的所有字符就要向后移动两位,时间复杂度过大,太麻烦解法二:从后到前复制,时间复杂...原创 2020-02-23 11:15:45 · 428 阅读 · 0 评论 -
剑指offer面试题3:在二维数组存储方式、初始化,二位数组应用:二位数组的查找
1.二位数组存储方式:第一,数组元素在内存中是顺序、连续存储的。第二,matrix是一个二维数组,二维数组在内存中是按行存放的,即先放第1行,再放第2行……每行中的元素是按列下标由小到大的次序存放,这样的存储方式也称为行优先存储。第三,这里定义的数组 int *matrix是一个指针数组,指针数组的每个元素都是指针变量。举个例子,如果一个4行4列的二维指针数组,那么他的第2行第3列(row...原创 2020-02-21 10:55:05 · 291 阅读 · 0 评论 -
剑指offer面试题6:重建二叉树,先序遍历、中序遍历原理
下面左图的二叉树的前序遍历(头左右)是:1、 2、4、7 | 3、5、6、8中序遍历(左头右)是:4、7、2、1 | 5、3、8、6根据前序遍历和中序遍历还原二叉树的思路:1.找到根节点在中序遍历数组中的下标2.根据根节点下标划分左右子树,循环递归例如左子树的建成:(1)前序遍历的第一个数1是根节点(头左右),在中序遍历的下标是4,那么前三个4、7、2都是左...原创 2019-04-17 21:07:22 · 315 阅读 · 0 评论 -
剑指offer面试题5:从尾到头输出链表
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。分析:链表本身只记录了下一个节点的位置,不能反过来,所以要把链表的记录导入到一个可以先进后出的容器里,就是栈,题目要求返回一个动态数组vector/*** struct ListNode {* int val;* struct ListNode *next;* ...原创 2019-04-12 10:47:22 · 205 阅读 · 0 评论 -
面试题8:旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。二分法:1.首先判断数组是否为空2.设left为最左边的下标03.设right为最右边的下标ro...原创 2019-03-31 22:45:48 · 94 阅读 · 0 评论 -
剑指offer——斐波那契之跳台阶以及变态跳台阶及矩形覆盖的一般形态总结
一、题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思想:1.找规律:台阶数:1 2 3 4 5 6 7跳法: 1 2 3 5 8 13 21只看跳法的变化就可以看出f(n)=f(n-1)+f(n-2)2.假如n个台阶有f(n)种方法最后一步可以是跳了一...原创 2019-04-01 01:41:16 · 144 阅读 · 0 评论 -
剑指offer——二维数组的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。注意:1.只能从左下角坐标或右上角坐标找起,比如下表的4*4数组,若target比右上角的9大,则row++去下一行找,若target比右上角角的9小,则col--去左边的列找2...原创 2019-04-05 16:16:51 · 147 阅读 · 0 评论 -
剑指offer——字符串替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路一:新建一个字符串,将原字符串遍历,不是空格就直接赋值个新字符串,遇到空格就在新字符串里加"%20"缺点:时间复杂度为O(n^2),空间复杂度是O(n)#include<iostream>usin...原创 2019-04-10 14:06:37 · 114 阅读 · 0 评论