随笔分类 - 剑指offer
摘要:剑指 Offer 35. 复杂链表的复制 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 示例 1: 输入:head = [[7,null],[13,0],
阅读全文
摘要:剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: ["CQue
阅读全文
摘要:剑指 Offer 54. 二叉搜索树的第k大节点 给定一棵二叉搜索树,请找出其中第k大的节点。 示例 1: 示例 2: 限制: 1 ≤ k ≤ 二叉搜索树元素个数 解法一: 按右根左的顺序递归遍历二叉搜索树,第k个结点,即使第k大的结点 1 class Solution { 2 public int
阅读全文
摘要:06. 从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 解法一: 借用递归,递归时记录节点个数和当前结点的位置,递归到尾节点后创建数组,获取链表
阅读全文
摘要:leetcode 剑指 Offer 17. 打印从1到最大的n位数 方法一: 先统计出最大值,然后生成一个数组,利用一个循环进行赋值 1 class Solution { 2 public int[] printNumbers(int n) { 3 // 先统计出最大值 4 int maxNum =
阅读全文
摘要:leetcode 剑指 Offer 56 - II. 数组中数字出现的次数 II 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums = [3,4,3,3] 输出:4 示例 2: 输入:nums = [9,1,7,9,7,
阅读全文
摘要:70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出
阅读全文
摘要:101. 对称二叉树 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [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 进阶:你可以
阅读全文
摘要:21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 非递归(迭代): 简单的归并 1 class Solution { 2 // 简单的归并
阅读全文
摘要:160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表: 在节点 c1 开始相交。示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:R
阅读全文
摘要:121. 买卖股票的最佳时机 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第
阅读全文
摘要:65. 矩阵中的路径 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如矩阵中包含一条字符串"bcced"
阅读全文
摘要:剑指 Offer 59 - I. 滑动窗口的最大值 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,
阅读全文
摘要:63.数据流中的中位数 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读
阅读全文
摘要:54.字符流中第一个不重复的字符 思路: 在插入字符的时候,利用 hash 进行计数排序,查找第一个不重复的字符的时候只需再次遍历原串,判断每个字符在 hash 数组中的值是否为1,如果为1,则直接输出 下面分别使用 Hash 数组 和 HashMap 统计字符出现次数 使用hash 数组 1 pu
阅读全文
摘要:力扣238.除自身以外数组的乘积 & 51.构建乘积数组 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[
阅读全文
摘要:48. 不用加减乘除做加法 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路: 数字逻辑中全加器可以用一个异或门和一个与门实现,异或门计算本位,与门记录经过移位后的进位,要考虑到进位可能不止一位, 如 7 + 7 = 14,而二进制位 计算过程为: 11
阅读全文
摘要:47. 求1 + 2 + 3 + .... + n 题目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路一: 使用 && 运算符实现 if(n != 0)条件判断,因为 Java 的双与运算符左
阅读全文
摘要:43.左旋转字符串 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很
阅读全文
摘要:44. 翻转单词序列 题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子
阅读全文

浙公网安备 33010602011771号