剑指offer
文章平均质量分 68
刷题
amor_1
这个作者很懒,什么都没留下…
展开
-
滑动窗口的最大值
滑动窗口的最大值 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3原创 2021-06-28 10:20:11 · 157 阅读 · 0 评论 -
Go面试题
go struct能不能比较 因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型 Goroutine与线程的区别 许多人认为goroutine比线程运行得更快,这是一个误解。Goroutine并不会更快,它只是增加了更多的并发性。当一个goroutine被阻塞(比如等待IO),golang的scheduler会调度其它可以执行的goroutine运行。与线程相比,它有以下几个优点: 内存消耗更少: Goroutine所需要的内存通常只有2kb,而原创 2020-10-16 13:33:33 · 240 阅读 · 0 评论 -
操作系统面试题
进程和线程 进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 进程和线程的关系 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位 资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量 处原创 2020-08-04 15:44:04 · 118 阅读 · 0 评论 -
计算机网络面试题
Http和Https的区别 Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同: 端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443; 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源; 开销:Https通信需要证书,而证书一般需原创 2020-08-04 15:06:42 · 303 阅读 · 0 评论 -
python面试题
。。。原创 2020-07-31 18:43:36 · 82 阅读 · 0 评论 -
面试题45:把数组排成最小的数
面试题45:把数组排成最小的数 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 思路和代码 定义一种排序规则,假设有两个数a和b,若ab < ba,则a应该排在b前面。 class Solution { public: string PrintMinNum...原创 2020-04-02 15:41:21 · 64 阅读 · 0 评论 -
面试题41:数据流中的中位数
面试题41:数据流中的中位数 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路和代码 中位数就是排序后中间的数,那么用最大堆来保存中位数左半部分的数,最小堆保存...原创 2020-04-02 14:47:57 · 86 阅读 · 0 评论 -
面试题22:链表中倒数第k个结点
参考链接:https://blog.csdn.net/amor_1/article/details/104750116原创 2020-03-30 15:04:17 · 59 阅读 · 0 评论 -
面试题21:调整数组使奇数位于偶数前面
面试题21:调整数组使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路和代码 如果不要求时间复杂度的话,可以用一个数组,先扫描一遍,把奇数加入,再扫描一遍,把偶数加入,最后两个数组复制一下。 class Solution { public: voi...原创 2020-03-30 14:43:31 · 50 阅读 · 0 评论 -
面试题20:表示数值的字符串
等同于leetcode:https://blog.csdn.net/amor_1/article/details/104898449原创 2020-03-30 13:53:40 · 57 阅读 · 0 评论 -
面试题19:正则表达式匹配
面试题19:正则表达式匹配 请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配 思路和代码 参考链接:https://editor.csdn.net/md/?ar...原创 2020-03-30 13:49:27 · 93 阅读 · 0 评论 -
面试题16:数值的整数次方
面试题16:数值的整数次方 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0 思路和代码 题目看似很简单,其实事实上也很简单,但是细节需要考虑到。 首先判断输入base和exponent是否合理,然后判断指数是否小于0,如果小于0,则应该求出绝对值,最后的结果还要取倒数。 在计算正数的次方时,可...原创 2020-03-29 19:22:16 · 47 阅读 · 0 评论 -
面试题15:二进制中1的个数
面试题15:二进制中1的个数 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路:常规思路 常规思路就是不断从右向左判断数字的那个位置是不是1,通过位与运算。即可判断。 注意要flag左移,而不是n右移,因为n有可能是负数,而负数右移最高位填充的是符号位。 class Solution { public: int NumberOf1(int n) { ...原创 2020-03-29 17:04:50 · 81 阅读 · 0 评论 -
面试题14:剪绳子
面试题14:剪绳子、 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 思路1:动态规划 class Solution { public: ...原创 2020-03-29 15:44:40 · 130 阅读 · 0 评论 -
面试题13:机器人的运动范围
面试题13:机器人的运动范围 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 思路和代码 递归和回溯 ...原创 2020-03-29 15:08:44 · 61 阅读 · 0 评论 -
面试题12:矩阵中的路径
面试题12:矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不...原创 2020-03-29 14:09:23 · 67 阅读 · 0 评论 -
面试题11:旋转数字的最小数字
面试题11:旋转数字的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 一次遍历O(N) class Solution { public: int mi...原创 2020-03-29 13:12:22 · 81 阅读 · 0 评论 -
面试题10:斐波那契数列
面试题10:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 递归:效率不高 class Solution { public: int Fibonacci(int n) { if(n <= 0) return 0; if(n == 1) ...原创 2020-03-29 12:38:24 · 61 阅读 · 0 评论 -
面试题9:用两个栈实现队列
面试题9:用两个栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路和代码 stack1用于压栈,stack2用于出栈,push操作直接将元素压入stack1中,pop操作先判断stack2是否为空,若不为空,直接弹出栈顶元素,若为空,则将stack1中元素都弹出进入stack2,然后再弹出stack2栈顶元素。 class Solution { ...原创 2020-03-29 12:18:21 · 70 阅读 · 0 评论 -
面试题8:二叉树的下一个结点
面试题8:二叉树的下一个结点 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路和代码: 有三种情况: 如果pNode有右孩子,则下一个结点为右子树的最左结点。 如果pNode没有右孩子,并且pNode为其父节点的左孩子,则下一个节点为父节点 如果pNode没有右孩子,并且是其父节点的右孩子,则继续向上遍历...原创 2020-03-29 12:01:45 · 82 阅读 · 0 评论 -
面试题7:重建二叉树
面试题7:重建二叉树 前序和中序,中序和后续重建二叉树,链接在此:https://blog.csdn.net/amor_1/article/details/105005396原创 2020-03-29 11:21:08 · 64 阅读 · 0 评论 -
面试题6:从尾到头打印链表
面试题6:从尾到头打印链表 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 思路1:递归 先递归下一个结点,再打印值,就可以实现逆序了。 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x)...原创 2020-03-29 11:03:10 · 64 阅读 · 0 评论 -
面试题5:替换空格
描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路和代码 主要分为三步: 扫描一遍字符串,得到字符串长度和空格的个数 由空格的个数计算出新的字符串的长度 从后往前复制 class Solution { public: void replaceSpace(char *str,...原创 2020-03-28 20:12:20 · 94 阅读 · 0 评论 -
面试题4:二维数组中的查找
二维数组中的查找 描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路和代码 从右上角开始遍历,若小于目标元素,则往左走,若大于,往下走,若等于,直接返回。、 class Solution { public: bool Find(int t...原创 2020-03-28 18:18:16 · 80 阅读 · 0 评论 -
面试题3:数组中重复的数字
面试题3:数组中重复的数字 题目1:找出数组中的重复的数字 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 牛客题目链接:https://www.nowcoder.com/prac...原创 2020-03-28 17:59:28 · 129 阅读 · 0 评论