
面试
yezlun
没有能挡住你的bug
展开
-
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false原创 2020-08-11 09:29:23 · 210 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4/ 2 7/ \ / 1 3 6 9镜像输出: 4/ 7 2/ \ / 9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0 <= 节点个数 <= 1000这个题其实不难,看了一会就有思路了,只要看通了就不难,刚开始也是被二叉树的题吓到,细心一想求他的镜像,不就是把他的lef原创 2020-08-06 09:17:44 · 247 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000这个合并链表的思路其实不难,就是遍历两个链表,只有两个都为空的时候才遍历完成,每次都比较l1和l2当前节点的大小,小的那个就直接存入新链表就行,直到遍历完成,返回新链表思路就是那样,关键是看你怎么去写,刚开始想了很多以为很难写,其原创 2020-08-05 09:59:14 · 185 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL 限制:0 <= 节点个数 <= 5000这种数据结构的题感觉有点坑,在本地又不好测,提交上去出问题了也不知道哪里出问题了,也调试不到,我就被坑到了,本来刚开始按自己的思路写出来双指针的解法,可是怎么也过不了,看了题解,照着写也还是出问题,我感觉应该一个是原创 2020-08-03 09:28:27 · 152 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5这个题我看到首先想到的思路是先遍历一下链表,计算出链表的长度,再用长度和k计算出该把哪个值赋值为头节点要注意的是,计算链表长度时,是从1开始不是0,原创 2020-07-29 09:46:41 · 138 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一1 <= nums.length <= 500001 <= nums[i] <= 10000这个题刚开始一看着就想到了思路就是一直在想怎么快一点,后面就写了一个整体遍历的只处理偶数,奇数不管,直接将偶数往后放就行了还有一种思路是从两边开始找原创 2020-07-28 09:56:37 · 111 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该原创 2020-07-27 09:25:48 · 183 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]用返回一个整数列表来代替打印n 为正整数这个题刚看完就是直接暴力的思路,,然后用暴力直接过了,看题解才考虑到如果是在强类型语言中,如果数字太大int和long是存不够的,所以对PHP来说这样还是可以过的。在题解中还看到一种方法就是利用递归来做,从最高位递归下去找,再把数字组合起来感觉在没有原创 2020-07-23 09:26:26 · 126 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25-100.0 < x < 100.0n 是 32 位有符号整数,其数值原创 2020-07-15 13:29:43 · 141 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 0000000000000原创 2020-07-15 12:15:34 · 435 阅读 · 0 评论 -
剑指 Offer 14- II. 剪绳子 II
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 =原创 2020-07-15 10:47:58 · 182 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子
*给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 3原创 2020-07-13 11:53:41 · 218 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m = 3, n原创 2020-07-12 19:58:24 · 150 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格原创 2020-07-12 16:56:57 · 344 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0其实这个题的意思是找这个数组中最小的元素,他有旋转数组的规律,其实不管他是不是旋转数组,只要进行增序排序之后,取数组第一个值就行。如果这要用到旋转数组性质的话,可采用二分法找,要注意的原创 2020-07-12 10:51:22 · 176 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:210 <= n <= 100这个题想了好久,,没想到就是一个斐波那契的题。思路应该是这样想,如果为n时f(n),跳最后一下的时候他有两种跳的方法,一种就是跳一下的时候,前面的就只需要知道n-1的最多跳法f(n原创 2020-07-11 23:39:14 · 193 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:50 <= n原创 2020-07-11 17:41:56 · 140 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )提示:1 <= values <= 10000最多会对 appendTail、deleteHead 进行 10000 次调用这里我就不贴输入和输出样例了,本来刚开始读题就模模糊糊的,看了他的输入输出样例就更迷了,首先是要理解清楚这个题是要干嘛他要我们做的就是通过维护原创 2020-07-11 16:37:45 · 163 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)示例 1:输入:head = [1,3,2]输出:[2,3,1]0 <= 链表长度 <= 10000这里要费时一点的就是怎么从尾到头的返回,最常用的方法就是遍历一遍存入一个数组,再倒着遍历回去存入一个新数组,然后返回这个新数组。我这里用的是官方给出的栈思想,利用array_unshift从数组的头部插入,这样就相当于尾部放在数组的最前面了贴出代码:class Solution { /**原创 2020-07-11 15:37:45 · 184 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."0 <= s 的长度 <= 10000解这个题主要想到了两种方法:1.直接用php内置函数str_replace2.这个是看题解写的,先计算出空格数量,然后得到新字符串的长度,然后从后面开始加进去,这里要注意的就是为了节省空间,不开辟一个新变量存储新字符,在原来那个字符中必须要从后面开始加,因为只有后面才是空着的,前面都是原创 2020-07-11 12:09:07 · 162 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target = 5,返回 tru原创 2020-07-11 11:05:41 · 250 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 2 <= n <= 100000感觉这个题就挺简单的,刚开始想到的是用in_array判断,判断一个删除一个,然后想到的是用php内置函数array_count_values,再直接判断value原创 2020-07-11 09:08:09 · 193 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下图:0 <= 节点个数 <= 5000做着一道题其实就是想学习一下二叉树的生成,以及二叉树的遍历方式,这里是通过前序遍历和中序遍历唯一确定一棵二叉树的,中序跟后序也是可以唯一确定一棵二叉树。只需要根据中序遍历和前序遍历之间的关系就可以生成一原创 2020-07-09 09:41:10 · 141 阅读 · 0 评论 -
LeetCode 1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]这个题一拿着第一时间想到的就是暴力解决,直接遍历一下再看nums数组中是否target-value的值,如果有的话就返回,贴出代码:原创 2020-07-07 20:51:24 · 116 阅读 · 0 评论 -
LeetCode 378有序矩阵中第K小的元素
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13提示:你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。刚开始一读了这个题第一思路就是先二维转一位,然后排序,然后再根据k和键的关系直接取,本来以为没这么简单,就先尝试了一下桶原创 2020-07-07 15:36:27 · 279 阅读 · 1 评论 -
LeetCode 718 最长重复子数组
题目:给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100刚开始看着这个题,想得简单了以为就找出公共的数字的长度最大的就行了,后面提交发现都不对,看了没有过的数据,慢慢的琢磨透了这个题的意思。然后在自己原有的代码上改,原创 2020-07-06 09:30:03 · 164 阅读 · 0 评论 -
计算机网络笔记
物理层(以比特流单位,中继器、集线器)1.通信方式单工通信:只能单向传输半双工通信:双向交替传输,不能两边同时传全双工通信:双向同时传输传输层(以帧为单位,网卡、网桥、交换机)1.封装成帧将网络层传下来的包添加尾部和首部,用于标记帧的开始和结束2.透明传输在进行转义符的传递时,用户察觉不到转义符的存在3.差错检测目前数据链路层广泛使用循环冗余检验(CRC)来检查比特差错4.MAC地址处于数据链路层,长度6个字节(48位),用于唯一标识网络适配器(网卡)5.协议原创 2020-06-26 22:47:14 · 338 阅读 · 0 评论