数据结构的实现
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 · 195 阅读 · 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 · 229 阅读 · 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 · 172 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL 限制:0 <= 节点个数 <= 5000这种数据结构的题感觉有点坑,在本地又不好测,提交上去出问题了也不知道哪里出问题了,也调试不到,我就被坑到了,本来刚开始按自己的思路写出来双指针的解法,可是怎么也过不了,看了题解,照着写也还是出问题,我感觉应该一个是原创 2020-08-03 09:28:27 · 135 阅读 · 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 · 128 阅读 · 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 · 173 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )提示:1 <= values <= 10000最多会对 appendTail、deleteHead 进行 10000 次调用这里我就不贴输入和输出样例了,本来刚开始读题就模模糊糊的,看了他的输入输出样例就更迷了,首先是要理解清楚这个题是要干嘛他要我们做的就是通过维护原创 2020-07-11 16:37:45 · 154 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)示例 1:输入:head = [1,3,2]输出:[2,3,1]0 <= 链表长度 <= 10000这里要费时一点的就是怎么从尾到头的返回,最常用的方法就是遍历一遍存入一个数组,再倒着遍历回去存入一个新数组,然后返回这个新数组。我这里用的是官方给出的栈思想,利用array_unshift从数组的头部插入,这样就相当于尾部放在数组的最前面了贴出代码:class Solution { /**原创 2020-07-11 15:37:45 · 168 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下图:0 <= 节点个数 <= 5000做着一道题其实就是想学习一下二叉树的生成,以及二叉树的遍历方式,这里是通过前序遍历和中序遍历唯一确定一棵二叉树的,中序跟后序也是可以唯一确定一棵二叉树。只需要根据中序遍历和前序遍历之间的关系就可以生成一原创 2020-07-09 09:41:10 · 130 阅读 · 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 · 111 阅读 · 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 · 264 阅读 · 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 · 152 阅读 · 0 评论 -
链表的设计与实现(php)
这个是php链表的实现。php内存栈中一个对象名对应的是一个地址,改地址对应的是真是内容,所一可用next变量存储下一个节点对象的地址,以实现链表。在链表类还可以加入一个记录链表长度的变量(优化),这样可以方便一些操作。//设计链表//定义节点类error_reporting(E_ERROR);class Node{ public $val; public $next; funct...原创 2019-10-11 16:36:53 · 355 阅读 · 0 评论