Loading

随笔分类 -  算法

leetcode等算法题目
摘要:上图表示常用的二分查找模板: 第一种是最基础的,查找区间左右都为闭区间,比较后若不等,剩余区间都不会再包含mid;一般在不需要确定目标值的边界时,用此法即可。 第二种查找区间为左闭右开,要确定target左边界时,若nums[mid] == target,取right = mid: int left 阅读全文
posted @ 2021-09-01 17:41 WINLSR 阅读(241) 评论(0) 推荐(0)
摘要:推荐学习labuladong大佬的动态规划系列文章:先弄明白什么是动态规划即可,不必一次看完。接着尝试自己做,没有思路了再回过头看相应的文章。 动态规划一般可以由 递归 + 备忘录 一步步转换而来,不必被名字唬住。通常只要找到状态转移方程问题就解决了一大半,至于状态的选择只要题目做多了自然就会形成经 阅读全文
posted @ 2021-09-01 09:22 WINLSR 阅读(358) 评论(0) 推荐(0)
摘要:模板 result = {} void backtrack(选择列表, 路径) { if (满足结束条件) { result.add(路径) return } for 选择 in 选择列表 { 做选择 backtrack(选择列表,路径) 撤销选择 } } 核心就是从选择列表里做一个选择,然后一直递 阅读全文
posted @ 2021-08-31 19:23 WINLSR 阅读(107) 评论(0) 推荐(0)
摘要:栈 155. 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 class MinStack 阅读全文
posted @ 2021-08-30 17:24 WINLSR 阅读(274) 评论(0) 推荐(1)
摘要:二叉树的遍历 递归: void traverse (TreeNode root) { if (root == null) { return null; } //前序遍历位置 traverse(root.left); //中序遍历位置 traverse(root.right); //后序遍历位置 } 阅读全文
posted @ 2021-08-30 09:15 WINLSR 阅读(251) 评论(0) 推荐(1)
摘要:83. 删除排序链表中的重复元素 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。 class Solution { public ListNode deleteDuplicates(ListNode hea 阅读全文
posted @ 2021-08-08 15:40 WINLSR 阅读(199) 评论(0) 推荐(1)
摘要:912. 排序数组 给你一个整数数组 nums,请你将该数组升序排列。 归并排序 public class Sort { //归并排序 public static int[] MergeSort(int[] arr) { int[] temp = new int[arr.length]; merge 阅读全文
posted @ 2021-08-08 09:07 WINLSR 阅读(118) 评论(0) 推荐(0)
摘要:461. 汉明距离 思路:统计 x 和 y 异或得到的数中 1 的个数。异或时比特位相同得 0,否者得 1。 class Solution { public int hammingDistance(int x, int y) { int res = x ^ y; return countbits(r 阅读全文
posted @ 2021-08-05 23:12 WINLSR 阅读(124) 评论(0) 推荐(0)
摘要:337. 打家劫舍 III 思路:后序遍历 + 动态规划 推荐题解:树形 dp 入门问题(理解「无后效性」和「后序遍历」) /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode 阅读全文
posted @ 2021-07-31 11:27 WINLSR 阅读(78) 评论(0) 推荐(0)
摘要:253. 会议室 II(NO) 279. 完全平方数 class Solution { public int numSquares(int n) { // dp[i] : 组成和为 i 的最少完全平方数个数 // base case: dp[0] = 0; int[] dp = new int[n 阅读全文
posted @ 2021-07-17 04:39 WINLSR 阅读(118) 评论(0) 推荐(0)
摘要:207. 课程表 思路:根据题意可知:当课程之间不存在 环状 循环依赖时,便能完成所有课程的学习,反之则不能。因此可以将问题转换成: 判断有向图中是否存在环。使用 拓扑排序法 : 构建 入度表:记录每个结点的入度数; 构建 邻接表:记录每个结点的后继结点; 将入度为0的结点加入队列,开始遍历; 当一 阅读全文
posted @ 2021-07-17 04:32 WINLSR 阅读(77) 评论(0) 推荐(0)
摘要:142. 环形链表 II 思路:快慢指针,快慢指针相遇后,慢指针回到头,快慢指针步伐一致一起移动,相遇点即为入环点 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * Li 阅读全文
posted @ 2021-07-06 16:43 WINLSR 阅读(101) 评论(0) 推荐(0)
摘要:102. 二叉树的层序遍历 思路:使用队列。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() { 阅读全文
posted @ 2021-07-05 11:46 WINLSR 阅读(78) 评论(0) 推荐(0)
摘要:75. 颜色分类 思路:将 2 往后放,0 往前放,剩余的1自然就放好了。 使用双指针:left、right 分别指向待插入的 0 和 2 的位置,初始 left 指向数组头,right 指向数组尾部。 从头开始遍历数组,若当前位置数为 2 则与 right 所指向元素互换,然后 right 左移, 阅读全文
posted @ 2021-07-03 19:27 WINLSR 阅读(57) 评论(0) 推荐(0)
摘要:46. 全排列 思路:典型回溯法 class Solution { public List<List<Integer>> permute(int[] nums) { LinkedList<Integer> track = new LinkedList<>(); boolean[] visited = 阅读全文
posted @ 2021-06-30 20:02 WINLSR 阅读(90) 评论(0) 推荐(0)
摘要:20. 有效的括号 class Solution { public boolean isValid(String s) { Map<Character, Character> map = new HashMap<>() { { put(')', '('); put('}', '{'); put('] 阅读全文
posted @ 2021-06-29 21:52 WINLSR 阅读(79) 评论(0) 推荐(0)
摘要:1. 两数之和 思路一:暴力遍历所有组合 class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nu 阅读全文
posted @ 2021-06-25 14:19 WINLSR 阅读(259) 评论(0) 推荐(1)