面试经典 150 题-回溯 LeetCode 面试经典 150 题-回溯从今天开始练习ACM模式的题目,从牛客上找力扣对应或相似的题目。 字符串组合穷举 使用treeset去重,重定义比较函数。 外层循环枚举字符串长度,内层循环枚举起始位置,加入集合。 1234567891011121314151617181920212223242526272829303132import java.util.*;// 注意类名必须为 M 2025-02-15 算法笔记 > 回溯 #回溯
面试经典 150 题-图 LeetCode 面试经典 150 题-图岛屿数量深度优先搜索 遍历图,当遇到为1的格子时,开始深度优先搜索。 判断当前位置是否合法,判断是否是1防止重复遍历。 标记当前位置已访问过,然后遍历上下左右四个方向。 123456789101112131415161718192021222324252627282930313233343536373839404142434445class Soluti 2025-01-22 算法笔记 > 图 #二叉树
面试经典 150 题-二叉树 LeetCode 面试经典 150 题-二叉树二叉树的最大深度深度优先搜索当前节点最大深度为max(左子树最大深度, 右子树最大深度) + 1. 12345678class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; 2025-01-15 算法笔记 > 二叉树 #二叉树
面试经典 150 题-队列 LeetCode 面试经典 150 题-队列环形链表快慢指针定义快慢指针,若两指针最后相遇则有环,否则快指针会指向空。 123456789101112131415161718192021222324252627282930/** * Definition for singly-linked list. * class ListNode { * int val; * Lis 2025-01-12 算法笔记 > 队列 #队列
面试经典 150 题-栈 LeetCode 面试经典 150 题-栈有效的括号栈 如果是左括号则入栈,如果是右括号则查看栈顶是否匹配。 最后判断栈是否为空。 1234567891011121314151617181920212223242526272829class Solution { public boolean isValid(String s) { // 剪枝 2025-01-10 算法笔记 > 栈 #栈
面试经典 150 题-区间 LeetCode 面试经典 150 题-区间汇总区间模拟1234567891011121314151617181920212223242526272829303132333435class Solution { public List<String> summaryRanges(int[] nums) { List<String> r 2025-01-09 算法笔记 > 区间 #贪心 #区间
面试经典 150 题-哈希表 LeetCode 面试经典 150 题-哈希表赎金信哈希表 对magzine中的字符做统计。 遍历ransomNote字符串,对出现的字符,哈希表-1,如果出现小于0的情况则返回false,否则最后返回true。 123456789101112131415161718class Solution { public boolean canConstruct(String ranso 2025-01-06 算法笔记 > 哈希表 #哈希表
面试经典 150 题-矩阵 LeetCode 面试经典 150 题-矩阵有效数独模拟先判断行,再判断列,再判断九宫格。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950class Solution { public boolean isValidSudoku(char[][] 2025-01-04 算法笔记 > 矩阵 #矩阵
面试经典 150 题-滑动窗口 LeetCode 面试经典 150 题-滑动窗口长度最小的子数组前缀和+滑动窗口子数组不是子序列,不能去掉一些数字,它必须是连续的。考虑求数组的前缀和,前缀和数组一定是飞递减的,因为数组中的数字都是大于0的。然后遍历前缀和数组,维护一个滑动窗口,如果当前和小于目标,则滑动窗口的右指针右移扩大窗口,否则左指针右移缩小窗口,同时更新最短子数组长度。 12345678910111213141516171 2025-01-02 算法笔记 > 滑动窗口 #滑动窗口
面试经典 150 题-双指针 LeetCode 面试经典 150 题-双指针验证回文串双指针定义双指针指向首尾,left向右移动,right向左移动,如果遇到非字母数字字符,可以直接将其忽略,继续判断下一个字符,如果两指针所指字符都是字母数字字符且不相等,直接返回false,否则待两指针相遇,返回true。 12345678910111213141516171819202122232425class Solution 2025-01-01 算法笔记 > 双指针 #双指针