![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法面试
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 · 66 阅读 · 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 · 78 阅读 · 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 · 159 阅读 · 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 31 [3 -1 -3] 5 3 6 7 .原创 2021-11-21 21:34:53 · 185 阅读 · 0 评论 -
20. 有效的括号
有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。分析:这道题看着挺简单的,就用栈是实现。谁曾想一看就会,一做就错。1、stack 的方法:入栈:push(Object o)出栈:pop()获取栈顶元素:peek()判空:empty() 不是 isEmpty()2、String 的方法遍历:char s.charAt();Strin.原创 2021-11-18 20:23:52 · 43 阅读 · 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 · 3212 阅读 · 0 评论 -
232. 用栈实现队列
用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):入栈:模拟进队列出栈:模拟出队列push:在队列后追加一个元素pop:删除队列第一个元素peek:获取队列第一个元素注意:1、初始化两个栈,必须在方法外,是类变量。2、出队列,把元素从入栈里转到出栈里的时候,必须保证出栈里没有元素再转,否则,再次添加一个元素的时候,会导致顺序错乱。...原创 2021-11-13 10:04:32 · 312 阅读 · 0 评论 -
349. 两个数组的交集
两个数组的交集给定两个数组,编写一个函数来计算它们的交集思路:数组的长度必须在初始化时确定,用于分配内存空间。如果不确定,就不得不使用最大长度的的,容易造成空间浪费。长度不定,有需要去重的,考虑使用set。...原创 2021-11-07 20:18:39 · 34 阅读 · 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 · 38 阅读 · 0 评论 -
142. 环形链表 II
环形链表 II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。解题思路:1、快慢指针,慢指针走一步,快指针走两步,找相遇节点。注意:初始时,快指针开始走的时候,慢指针也必须走。 fast = head.next.next; slow = head.nex.原创 2021-11-06 10:06:48 · 37 阅读 · 0 评论 -
203. 移除链表元素
移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。方法一:建立虚拟头结点,所有节点统一处理注意:1、设立当前节点和前一个节点 两个节点循环,不容易出现空指针错误。2、删除和不删除的情况,指针后移要区别处理,注意不同点。3、返回的是 虚拟头结点的next,而不是之前的head方法二:头结点删除单独处理注意:链表结点定义public class ListNode(){ int val;.原创 2021-10-31 11:41:47 · 37 阅读 · 0 评论 -
59. 螺旋矩阵 II
螺旋矩阵 II给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。整理个人思路:四个方向循环 右 下 左 上整体循环退出条件:数组填满。转换方向条件:超出数组边界,或者在上一圈循环中已经赋值参考思路:偶数,循环 n/2 圈。奇数,循环 n/2 圈+中间一个数字整体循环退出条件:循环够 n/2 圈转换方向条件:左闭右开,每一边都循环 边数-1的数字,留一个给下一边循环。减少出错概率。...原创 2021-10-30 13:53:32 · 49 阅读 · 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 · 89 阅读 · 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 · 30 阅读 · 0 评论