算法面试
zwanying
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
257. 二叉树的所有路径
力扣链接 题目 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root = [1,2,3,null,5] 输出:[“1->2->5”,“1->3”] 示例 2: 输入:root = [1] 输出:[“1”] 提示: 树中节点的数目在范围 [1, 100] 内 -100 <= Node.val <= 100 解题思路 求路径,好像不管怎么遍历都有点不对劲: 找到第一个叶子节点之后,该怎么原创 2022-02-10 22:12:53 · 118 阅读 · 0 评论 -
111. 二叉树的最小深度
力扣链接 111. 二叉树的最小深度 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:2 示例 2: 输入:root = [2,null,3,null,4,null,5,null,6] 输出:5 提示: 树中节点数的范围在 [0, 105] 内 -1000 <= Node.val <= 1000 解题思路 层序遍历,如果该层存在原创 2022-01-25 22:24:46 · 166 阅读 · 0 评论 -
347. 前 K 个高频元素
求元素次数,想到用 map 计录。 前 k 个高频元素:排序。 map 无法对值排序,可更换 map 键值位置,或把map 转化为list 来实现。 class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer,Integer> map = new HashMap(); //记录次数 for(int i : nums)原创 2022-01-11 20:48:29 · 207 阅读 · 0 评论 -
239. 滑动窗口最大值
滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例 1: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 .原创 2021-11-21 21:34:53 · 237 阅读 · 0 评论 -
20. 有效的括号
有效的括号 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 分析: 这道题看着挺简单的,就用栈是实现。谁曾想一看就会,一做就错。 1、stack 的方法: 入栈:push(Object o) 出栈:pop() 获取栈顶元素:peek() 判空:empty() 不是 isEmpty() 2、String 的方法 遍历: char s.charAt(); Strin.原创 2021-11-18 20:23:52 · 92 阅读 · 0 评论 -
225. 用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。 复习一下 Java 的 栈 和 队列。 Stack:一个类,继承 Vector ,线程安全,性能较差,不推荐使用。 push()原创 2021-11-14 13:09:33 · 3290 阅读 · 0 评论 -
232. 用栈实现队列
用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 入栈:模拟进队列 出栈:模拟出队列 push:在队列后追加一个元素 pop:删除队列第一个元素 peek:获取队列第一个元素 注意: 1、初始化两个栈,必须在方法外,是类变量。 2、出队列,把元素从入栈里转到出栈里的时候,必须保证出栈里没有元素再转,否则,再次添加一个元素的时候,会导致顺序错乱。 ...原创 2021-11-13 10:04:32 · 366 阅读 · 0 评论 -
349. 两个数组的交集
两个数组的交集 给定两个数组,编写一个函数来计算它们的交集 思路: 数组的长度必须在初始化时确定,用于分配内存空间。如果不确定,就不得不使用最大长度的的,容易造成空间浪费。 长度不定,有需要去重的,考虑使用set。 ...原创 2021-11-07 20:18:39 · 80 阅读 · 0 评论 -
242. 有效的字母异位词
有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 思路: 使用一个26个长度的数组,记录一个字符串每个字符出现的数量。 循环另一个字符串,对出现的字符数量减一。 最后,数组每个值都为0.即为相等。 语法: //获取字符串中某个字符的位置 String s = "abc"; char a = s.charAt(0); 整型数组,默认每个元素都为0。 ...原创 2021-11-07 11:43:54 · 90 阅读 · 0 评论 -
142. 环形链表 II
环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 解题思路: 1、快慢指针,慢指针走一步,快指针走两步,找相遇节点。 注意:初始时,快指针开始走的时候,慢指针也必须走。 fast = head.next.next; slow = head.nex.原创 2021-11-06 10:06:48 · 86 阅读 · 0 评论 -
203. 移除链表元素
移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 方法一:建立虚拟头结点,所有节点统一处理 注意: 1、设立当前节点和前一个节点 两个节点循环,不容易出现空指针错误。 2、删除和不删除的情况,指针后移要区别处理,注意不同点。 3、返回的是 虚拟头结点的next,而不是之前的head 方法二:头结点删除单独处理 注意: 链表结点定义 public class ListNode(){ int val;.原创 2021-10-31 11:41:47 · 89 阅读 · 0 评论 -
59. 螺旋矩阵 II
螺旋矩阵 II 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 整理个人思路: 四个方向循环 右 下 左 上 整体循环退出条件:数组填满。 转换方向条件:超出数组边界,或者在上一圈循环中已经赋值 参考思路: 偶数,循环 n/2 圈。奇数,循环 n/2 圈+中间一个数字 整体循环退出条件:循环够 n/2 圈 转换方向条件:左闭右开,每一边都循环 边数-1的数字,留一个给下一边循环。减少出错概率。 ...原创 2021-10-30 13:53:32 · 104 阅读 · 0 评论 -
977. 有序数组的平方
977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 1、首先,想到暴力解法,排序还不会,时间复杂度 O(n^2+n) 2、看别人解法,知道用 双指针,时间复杂度可以到 O(n) 总结:有序的数组,就考虑用双指针降低时间复杂度 3、自己编写除了语法错误,还有边界值错误,导致有部分用例一直提交不通过。 class Solution { public int[] sortedSquares(int[] nums)原创 2021-10-27 22:05:07 · 176 阅读 · 0 评论 -
704. 二分查找
704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 1、刚开始刷,看了题目没感觉,摸不着头脑,直接看了别人的代码。 2、看懂了自己写了一遍,感觉挺简单,不会出错,但实际还是出了 1 处错误,一直验证不通过,在此记录,方便下次复习。 int mid = (left + right)/2; 错写为 int mid = (left - right)/2; 犯了低级错误。原创 2021-10-26 22:24:30 · 84 阅读 · 0 评论
分享