随笔分类 -  剑指offer刷题

摘要:剑指 Offer 29. 顺时针打印矩阵 难度:简单 根据题目示例可以发现,顺时针打印矩阵的顺序是“从左向右、从上向下、从右向左、从下向上”循环。 因此,考虑设定矩阵的“左、上、右、下”四个边界,模拟以上矩阵遍历顺序。 算法流程: 空值处理:当 matrix 为空时,直接返回空列表 [] 即可。 初 阅读全文
posted @ 2022-11-07 17:17 幻梦翱翔 阅读(17) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 39. 数组中出现次数超过一半的数字 难度:简单 方法一:哈希表统计法 遍历数组 nums,用 HashMap 统计各数字的数量,即可找出众数。此方法时间和空间复杂度均为 O(N)。 方法二:数组排序法 将数组 nums 排序,数组中点的元素一定为众数。 方法三:摩尔投票法 核心理 阅读全文
posted @ 2022-10-29 11:53 幻梦翱翔 阅读(39) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 15. 二进制中 1 的个数 难度:简单 方法一:逐位判断 算法流程: 初始化数量统计变量 res = 0。 循环逐位判断:当 n = 0 时跳出。 res += n & 1:若 n & 1 = 1,则统计数 res 加一。 n >>= 1:将二进制数字 n 无符号右移一位( Ja 阅读全文
posted @ 2022-09-20 11:56 幻梦翱翔 阅读(21) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 07. 重建二叉树 难度:中等 根据「分治算法」思想,对于树的左、右子树,仍可复用以上方法划分子树的左右子树。 分治算法解析: 递推参数:根节点在前序遍历的索引 root、子树在中序遍历的左边界 left、子树在中序遍历的右边界 right; 终止条件:当 left > right 阅读全文
posted @ 2022-08-24 10:34 幻梦翱翔 阅读(42) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 45. 把数组排成最小的数 难度:中等 此题求拼接起来的最小数字,本质上是一个排序问题。设数组 nums 中任意两数字的字符串为 x 和 y,则规定排序判断规则为: 若拼接字符串 x + y > y + x,则 x“大于”y; 反之,若 x + y < y + x,则 x“小于”y 阅读全文
posted @ 2022-05-29 10:43 幻梦翱翔 阅读(46) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 18. 删除链表的节点 难度:简单 没什么好说的,注意删除的节点为头节点的这一特殊情况即可。 class Solution { public ListNode deleteNode(ListNode head, int val) { if(head.val == val) retu 阅读全文
posted @ 2022-05-17 11:07 幻梦翱翔 阅读(33) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 10- I. 斐波那契数列 难度:简单 方法一:递归法 原理:把 f(n) 问题的计算拆分成 f(n-1) 和 f(n-2) 两个子问题的计算,并递归,以 f(0) 和 f(1) 为终止条件。 缺点:大量重复的递归计算,例如 f(n) 和 f(n - 1) 两者向下递归需要 各自计 阅读全文
posted @ 2022-05-14 11:29 幻梦翱翔 阅读(25) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 32 - I. 从上到下打印二叉树 难度:中等 方法一:层序遍历 BFS 题目要求的二叉树的从上至下打印(即按层打印),又称为二叉树的广度优先搜索(BFS)。 BFS 通常借助队列的先入先出特性来实现。 算法流程: 特例处理:当树的根节点为空,则直接返回空列表 []; 初始化:打印 阅读全文
posted @ 2022-05-07 12:25 幻梦翱翔 阅读(42) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 03. 数组中重复的数字 难度:简单 方法一:哈希表 / Set class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> dic = new HashSet<>(); for(int num : 阅读全文
posted @ 2022-05-03 11:37 幻梦翱翔 阅读(21) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 05. 替换空格 难度:简单 方法一:遍历添加 class Solution { public String replaceSpace(String s) { StringBuilder res = new StringBuilder(); for(Character c : s. 阅读全文
posted @ 2022-05-02 11:49 幻梦翱翔 阅读(21) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 06. 从尾到头打印链表 难度:简单 方法一:递归法 class Solution { ArrayList<Integer> tmp = new ArrayList<Integer>(); public int[] reversePrint(ListNode head) { rec 阅读全文
posted @ 2022-05-01 12:02 幻梦翱翔 阅读(21) 评论(0) 推荐(0) 编辑
摘要:剑指 Offer 09. 用两个栈实现队列 难度:简单 设计栈 A 用于加入队尾操作,栈 B 用于将元素倒序,从而实现删除队首元素。 class CQueue { LinkedList<Integer> A, B; public CQueue() { A = new LinkedList<Integ 阅读全文
posted @ 2022-05-01 11:40 幻梦翱翔 阅读(22) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩