🔥 LeetCode 热题 HOT 100(41-50)】的更多相关文章

LeetCode 热题 HOT 100(05,正则表达式匹配) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力,这也是面试的必备环节,算法功底的展示往往能让面试官眼前一亮,这也是在大多数竞争者中脱颖而出的重要影响因素. 然而往往大多数人比较注重自身的实操能力,着重于对功能的实现,却忽视了对算法能力的提高.有的时候采用不同的算法来解决同一个问题,运行效率相差还是挺大的,毕竟我们最终还是需要站在客户的角度思考问…
337. 打家劫舍 III 思路:后序遍历 + 动态规划 推荐题解:树形 dp 入门问题(理解「无后效性」和「后序遍历」) /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val,…
253. 会议室 II(NO) 279. 完全平方数 class Solution { public int numSquares(int n) { // dp[i] : 组成和为 i 的最少完全平方数个数 // base case: dp[0] = 0; int[] dp = new int[n + 1]; for (int i = 1; i < n + 1; i++) { // 最大值即为i dp[i] = i; // 转移方程 for (int j = 1; i - j*j >= 0;…
142. 环形链表 II 思路:快慢指针,快慢指针相遇后,慢指针回到头,快慢指针步伐一致一起移动,相遇点即为入环点 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode detectC…
75. 颜色分类 思路:将 2 往后放,0 往前放,剩余的1自然就放好了. 使用双指针:left.right 分别指向待插入的 0 和 2 的位置,初始 left 指向数组头,right 指向数组尾部. 从头开始遍历数组,若当前位置数为 2 则与 right 所指向元素互换,然后 right 左移,直到当前位置元素不为2: 当前位置元素若为 0 则 和 left 所指元素互换,然后 left 右移.随后接着遍历,直到 和 right相遇. class Solution { public void…
46. 全排列 思路:典型回溯法 class Solution { public List<List<Integer>> permute(int[] nums) { LinkedList<Integer> track = new LinkedList<>(); boolean[] visited = new boolean[nums.length]; dfs(nums, track, visited); return res; } private List&…
207. 课程表 思路:根据题意可知:当课程之间不存在 环状 循环依赖时,便能完成所有课程的学习,反之则不能.因此可以将问题转换成: 判断有向图中是否存在环.使用 拓扑排序法 : 构建 入度表:记录每个结点的入度数: 构建 邻接表:记录每个结点的后继结点: 将入度为0的结点加入队列,开始遍历: 当一个结点出队时,将其后继结点的入度数减1,若减1后入度为0则将后继结点也加入队列: 当所有入度为0的结点都已经出队时,检查是否还有入度不为0的结点,存在则说明不可能完成所有课程的学习. class So…
102. 二叉树的层序遍历 思路:使用队列. /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * thi…
20. 有效的括号 class Solution { public boolean isValid(String s) { Map<Character, Character> map = new HashMap<>() { { put(')', '('); put('}', '{'); put(']', '['); } }; Deque<Character> stack = new LinkedList<>(); for(int i = 0; i <…
1. 两数之和 思路一:暴力遍历所有组合 class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) { if (nums[i] + nums[j] == target) { return new int[] {i, j}; } } } //没找到 return ne…