随笔分类 - 剑指Offer
剑指Offer刷题之路
摘要:剑指 Offer 32 - III. 从上到下打印二叉树 III 依旧是bfs搜索,这里可以添加一个boolean标识来代表从头部添加还是尾部添加。 /** * Definition for a binary tree node. * public class TreeNode { * int va
阅读全文
摘要:剑指 Offer 32 - II. 从上到下打印二叉树 II 还是比较常规的bfs搜索,先用队列添加每一层,在遍历每一层的时候将每个节点的左右子树分别按顺序加入队列中即可。 /** * Definition for a binary tree node. * public class TreeNod
阅读全文
摘要:面试题32 - I. 从上到下打印二叉树 比较简单的层序遍历,使用队列遍历每一层并将下一层的节点添加进队列即可。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left
阅读全文
摘要:剑指 Offer 50. 第一个只出现一次的字符 比较简单的map运用题,如果语言内有字符串查找算法还可以更加简单一些。 Java class Solution { public char firstUniqChar(String s) { if(null == s || s.equals(""))
阅读全文
摘要:剑指 Offer 11. 旋转数组的最小数字 注意,这里并没有告诉我们数组是否有序,而是可能有序,因此我们可以和选择字符串那题联系一下,找到分别有序的两个部分,将两部分分别反转后再整体反转,即可得到一个完全有序的数组。再返回数组的第一个数字即可。 class Solution { public in
阅读全文
摘要:剑指 Offer 04. 二维数组中的查找 一个比较简单的办法就是直接遍历这个二维数组,但是这样的办法效率比较低,并没有用到题目中提到的行列都是递增的条件。 class Solution { public boolean findNumberIn2DArray(int[][] matrix, int
阅读全文
摘要:剑指 Offer 53 - II. 0~n-1中缺失的数字 首先观察题目给我们的条件,有序递增数组中找元素,比较自然地会往二分上联系。一般的二分,我们找到答案后会直接返回,但这里的二分,我们需要不断缩小空间,直到找到为止。 class Solution { public int missingNum
阅读全文
摘要:剑指 Offer 53 - I. 在排序数组中查找数字 I 寻找数字左边界的二分,这里需要注意r和check函数的设置,这里选择的是不可以取到的r,即nums.length。 check的退出添加也是l < r。即l >= r时。 那么对于每个check,我们最终要得到的数字的左边界,如果nums[
阅读全文
摘要:剑指 Offer 03. 数组中重复的数字 对于此题,可以有几种不同的考虑,如果可以看出这是一类频率统计题,容易联系到哈希表,所以第一种方法也是比较容易想到的办法就是用哈希表来统计词频,这里由于数据范围可确定(0-n-1),可以用数组来简化一些代码上的书写,这种方法时间复杂度为$O(n)$,空间复杂
阅读全文
摘要:剑指 Offer 58 - II. 左旋转字符串 对于此题,如果用允许开辟新空间的算法,那么会比较简单,需要将n个字符移到原字符串的后面,所以考虑新字符串从位置为n处开始添加原字符串中的字符,再从0遍历至n,添加原字符串中的字符。 对于给定的k,因为此题给定了k < s.length。但我们为了追求
阅读全文
摘要:剑指 Offer 05. 替换空格 如果用Java语言的话,就比较简单了,只需要在遍历时,判断正遍历的字符是否为空格字符,若为空格字符,则在新串里添加$"%20"$即可。 class Solution { public String replaceSpace(String s) { StringBu
阅读全文
摘要:剑指 Offer 35. 复杂链表的复制 本题要求的是复制原链表,所以对于每一个原节点,都需要有一个和它相对应的老节点,从而我们建立一个老节点和新节点的映射关系,old2new,用来存储老节点和新节点的映射关联关系。 先遍历一趟原链表,将所有的节点都创建与之对应的新节点。 再遍历一趟链表时,将每个节
阅读全文
摘要:剑指 Offer 24. 反转链表 新建虚拟头,遍历原链表解法 一个比较简单可以将所有操作融合的解法是先新建一个虚拟头,然后依次遍历原链表,每次将正在遍历的位置插入到头结点,这样遍历完成后,得到的就是反转后的链表。 /** * Definition for singly-linked list. *
阅读全文
摘要:剑指 Offer 06. 从尾到头打印链表 递归解法 这里的一个比较简单的办法就是递归,由于需要的是从尾部开始打印链表,所以也就是递归出栈时打印,所以添加元素的操作在出栈时完成。 /** * Definition for singly-linked list. * public class List
阅读全文
摘要:剑指 Offer 30. 包含min函数的栈  比较简单的办法是创建两个栈,一个栈存原本需要入栈的元素,一个存当前
阅读全文
摘要:剑指 Offer 09. 用两个栈实现队列 思路比较好想到,可以先用一个栈全部存储入队元素,设这个栈为$stack1$,需要出栈时,判断另一个栈是否空,若为空,且$stack1$不为空,则说明可以从刚才入队的元素出队,于是$stack1$的元素转移到$stack2$,并将$stack2$弹栈,这样的
阅读全文

浙公网安备 33010602011771号