
剑指Offer
尔等同学
这个作者很懒,什么都没留下…
展开
-
剑指Offer(一) 数组中重复的数字,二维数组中的查找
2019年9月2日 愿你我有得有失,能哭能笑能尽欢 数组中重复的数字 题目一:在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7,的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数组2或者3。(n个元素,n种可能的取值) 思路: ...原创 2019-09-02 15:58:02 · 462 阅读 · 0 评论 -
剑指Offer(13)顺时针打印矩阵 包含min的栈
剑指Offer(13)顺时针打印矩阵 包含min的栈 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路: 12 34 输出为 ...原创 2019-09-30 21:43:52 · 148 阅读 · 0 评论 -
剑指Offer(12)镜像二叉树 对称的二叉树
剑指offer(12) 镜像二叉树 对称的二叉树 题目: 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ ...原创 2019-09-29 11:04:49 · 187 阅读 · 0 评论 -
剑指Offer(11) 合并链表 树的子结构
剑指offer(11) 合并链表 树的子结构 题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路: 递归 每次处理当前节点之后,递归处理下一个节点。 非递归 每次处理节点前判断两个链表的当前节点的大小,当某个链表遍历完之后,将另一个链表加到当前链表的最后一个节点。 代码: //递归 public ListNode Merge(Li...原创 2019-09-27 21:01:18 · 193 阅读 · 0 评论 -
剑指Offer(10)有环链表 翻转链表
剑指offer(10) 有环链表 反转链表 题目: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路: 快慢指针,当前一个指针和后一个指针相遇时,有环,提前结束则无. 然后将慢指针指向头节点,两个指针一起走,每次都走一步,相遇时即为入口节点。 (以下证明学习自牛客却顾所来径的回答) 1、设置快慢指针,假如有环,他们最后一定相遇。 2、两个指针分别从链表头和相遇点继续...原创 2019-09-26 16:10:54 · 559 阅读 · 0 评论 -
剑指Offer(九)调整数组 链表倒数第k个节点
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路: 方法1 借用冒泡的思想,每两项比较,如果前偶后奇就交换。 复杂度为O(n^2) 方法2 空间换时间 ,新建一个数组,遍历给定数组,求出这个数组中的奇数的个数记作a,再遍历一遍数组,遇到奇数放a-1的前面,否则放后面...原创 2019-09-25 00:50:02 · 179 阅读 · 0 评论 -
剑指Offer(八)删除链表的节点 删除链表重复节点
剑指offer(八) 删除链表的节点 删除链表重复节点 题目: 给定单向链表的头指针和一个节点指针 定义一个函数在O(1)时间内删除该节点 思路: 遍历一遍等于白给 O(n) 假设 1-2-3-4-5-6-7-8-9 当删除 2 这个节点的时候, 把2 之后的第一个节点3复制到一个temp节点,然后将temp 这个节点里的值复制给2,将temp的指针赋给 2 ,也就是2 节...原创 2019-09-22 14:35:39 · 148 阅读 · 0 评论 -
剑指Offer(七) 二进制中1的个数 数值的整数次方
题目: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路: 对于二进制数,有左移右移这样的位操作。可以判断当前数的最后一位是否为1,如果是,个数加1,不是则右移一位,继续判断。 这种方法的弊端是如果输出一个负数,会出现死循环。因为在负数中,二级制的第一位也是符号位,也就是1,右移之后不可以直接将符号位的1右移,还需要将第二位补为1. (>>右移运算符将一个运算对象...原创 2019-09-20 20:10:43 · 177 阅读 · 0 评论 -
剑指Offer(六) 机器人到达的格子 剪绳子
题目: 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 =19。请问该机器人能够达到多少个格子? 思路: 和矩阵中的路径一样,也是通过回溯法来将能...原创 2019-09-19 08:50:12 · 244 阅读 · 0 评论 -
剑指Offer(五)旋转数组的最小数字 矩阵中的路径
剑指Offer(五)旋转数组的最小数字 矩阵中的路径 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路: 遍历等于白给 O(n) 比 O(n) 更小的是 ...原创 2019-09-09 15:34:19 · 159 阅读 · 0 评论 -
剑指Offer(四)用两个栈实现一个队列,斐波那契数列及相关问题
剑指Offer(四)用两个栈实现一个队列,斐波那契数列及相关问题 题目: 用两个栈实现一个队列 思路: 方法一: 使用一个栈,依次压入,依次弹出,时间空间均为O(n) 方法二:递归,每次输出前,先输出他的下一个节点,然后依次调用. 方法三: 使用头插法,使用头插法去构建一个新的链表,这样最后的元素会在最前. 例子: 1 2 3 4 5 输出 5 4 3 2 1 代码: class Lis...原创 2019-09-09 15:33:52 · 315 阅读 · 0 评论 -
剑指offer(三)重建二叉树,二叉树的下一个节点
剑指offer(三)重建二叉树,二叉树的下一个节点 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: 前序遍历中,第一个数字就是整棵树的根节点. 中序遍历中,根节点之前的数字为根节点的左子树,之后...原创 2019-09-04 21:46:16 · 122 阅读 · 0 评论 -
剑指Offer(二)替换空格,从头到尾打印链表
题目: 请实现一个函数,把字符串中的每个空格替换成"%20" 例如输入"We are happy." 则输出"We%20are%20happy." 思路: 方法一,可以从头到尾扫描每个字符,遇到空格便把后面所有的字符向后移动,时间复杂度为O(n^2),暂不用 方法二,扫描一遍整个字符串,每有一个空格,都往字符串末尾添加两个任意字符,维护两个指针,指针a指向新建字符数组的最后一位,指针b...原创 2019-09-03 20:09:43 · 137 阅读 · 0 评论 -
剑指Offer(14)栈的压入 弹出,从上到下打印二叉树
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路: 模拟出栈的过程,每次用将入栈数组中的元素加到栈里,然后按出栈数组的顺序出栈,如果...原创 2019-10-01 16:03:16 · 195 阅读 · 0 评论