![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
NeverOW
这个作者很懒,什么都没留下…
展开
-
剑指Offer27.二叉树的镜像
题目从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]代码class Solution { public TreeNode mirrorTree(TreeNode root) { mirrorTree1(root); return root;.原创 2021-11-03 14:05:19 · 51 阅读 · 0 评论 -
剑指Offer 26. 树的子结构
题目输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \4 5/ 1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true思路.原创 2021-11-03 14:04:37 · 57 阅读 · 0 评论 -
剑指Offer32. Ⅱ-从上到下打印二叉树
题目从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]思路题目要求每一层打印到一行,返回值是 List<List>类型,就是说每一层的放在一个list里,再将这一层的list放在总的list里需要1个队列,2个列表将头结点加入队列,然后开始循环(队列不为空),建立.原创 2021-10-30 12:43:35 · 58 阅读 · 0 评论 -
剑指Offer50.第一个只出现一次的字符
题目在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s = “abaccdeff”返回 “b”s = “”返回 " "代码方法1:题目说明了s字符串只包含了小写字母,我们可以用new int[26]作为出现次数存储数组,26大小的数组按顺序对应26个字母遍历一次,将字母出现次数统计到数组中第二次遍历字符串,找出最先只出现一次的字母public char firstUniqChar(String s) { if (.原创 2021-10-29 14:51:16 · 71 阅读 · 0 评论 -
剑指Offer04.二维数组中的查找
题目在一个 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,返回 true。.原创 2021-10-28 09:59:03 · 77 阅读 · 0 评论 -
剑指Offer53- Ⅱ.0~n-1中缺失的数字
题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8代码方法1:public int missingNumber(int[] nums) { for(int i=0;i<nums.length;i++) { if(nums.原创 2021-10-27 14:50:55 · 82 阅读 · 0 评论 -
剑指Offer53-Ⅰ.在排序数组中查找数字
题目统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0代码二分法 public int search(int[] nums, int target) { int left=0,right=nums.length-1; int count=0; while(le.原创 2021-10-27 14:49:36 · 60 阅读 · 0 评论 -
剑指Offer58.左旋转字符串
题目字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”代码方法1:调库String.substring(beginIndex,endIndex)左闭右开.原创 2021-10-27 14:47:06 · 71 阅读 · 0 评论 -
剑指Offer35.复杂链表的复制
题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]示例 3:输入:h.原创 2021-10-27 14:45:49 · 69 阅读 · 0 评论 -
剑指Offer06.从头到尾打印链表
06.从头到尾打印链表题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路因为要返回链表的翻转数组,但是创建数组需要确定长度,所以我们先用count计数器记录链表的长度,创建相等长度的数组,再遍历链表,从数组的尾部开始存值,最后返回数组。遍历链表,算出长度创建数组,再次遍历链表,反向循环存入值,返回数组代码 publi原创 2021-10-25 10:34:45 · 128 阅读 · 0 评论 -
剑指Offer24.反转链表
24.反转链表题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路反转链表,我在这采取的思路是创建一个新节点,采用遍历原链表,新节点用头插法插入原链表的值,达到反转链表的效果创建两个辅助结点,一个新头结点采用头插法将原链表遍历出的节点插入新结点返回新链表代码 public stat原创 2021-10-25 10:33:51 · 54 阅读 · 0 评论 -
剑指Offer 30.包含min函数的栈
30.包含min函数的栈题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top();原创 2021-10-24 17:50:34 · 121 阅读 · 0 评论 -
剑指Offer09.用两个栈实现队列
09.用两个栈实现队列题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”原创 2021-10-24 11:35:46 · 91 阅读 · 0 评论