算法题
文章平均质量分 52
奋斗&&奋进
I want A++
展开
-
如何等概率的返回已经遍历到的节点?
蓄水池原创 2022-06-13 15:28:59 · 222 阅读 · 0 评论 -
玩两道广度优先搜索算法
了解bfs框架,以及思想,注意事项等原创 2022-06-09 15:03:19 · 204 阅读 · 1 评论 -
回溯之N皇后(选择列表是二维的,全排列的选择列表是一维的)
最好是先理解全排列的回溯算法怎么用,再来看这个选择列表是二维情况时的回溯算法,回溯算法的本质就是穷举,希望结合全排列和N皇后问题,能对回溯算法有一个较为清晰的认识,个人认为回溯算法的难点在于怎么去维护路径和选择列表...原创 2022-06-04 13:09:59 · 122 阅读 · 0 评论 -
理解回溯算法的一道基础题之全排列问题
回溯算法的本质就是穷举原创 2022-06-04 11:47:30 · 180 阅读 · 0 评论 -
如何利用归并排序的merge
题干:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。思路:首先要明确升序数组就没有所谓的逆序对,降序数组就是任意抽取两个元素都构成逆序对,换句话说,数完逆序对,我把可以把数过的区间进行排序,后续在统计别的逆序对对数的时候就可以避免重复计算逆序对有两种数法,一种是数这个数后面有多少个元素比自己小,那针对这个位置的逆序对的对数就是多少个,反过来,也可以数一个元素前面有多少个元素比自己大,那就针对该位置有多少个逆序对,之所以不同时数前面原创 2022-06-02 10:55:06 · 97 阅读 · 0 评论 -
验证二叉搜索性的递归解法
题干:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路:本题的直观想法可能上来就是站在一个节点上看这个节点的值是不是比它的左子树的节点值更大,并且还要比它的右子树的节点值更小,如果二者都满足,则说明,当前节点检查完毕,那就可能写出错误代码:如上图,虽然每个节点的值都能在遍历过程中通过检查,但是节点值为5的节点,显然比它的右子树中的原创 2022-06-01 16:25:03 · 134 阅读 · 0 评论 -
带权重的随机选择算法
带权重的随机选择算法https://leetcode.cn/problems/random-pick-with-weight/题干:给你一个 下标从 0 开始 的正整数数组 w ,其中 w[i] 代表第 i 个下标的权重。请你实现一个函数 pickIndex ,它可以 随机地 从范围 [0, w.length - 1] 内(含 0 和 w.length - 1)选出并返回一个下标。选取下标 i 的 概率 为 w[i] / sum(w) 。例如,对于 w = [1, 3],挑选下标 0 的概原创 2022-05-27 16:10:31 · 887 阅读 · 0 评论 -
差分数组算法
差分数组适用于对数组某些区间元素频繁的增减问题如果是对数组某些区间频繁查询,那就是前缀和问题对于差分数组问题,可以定死一个类专门对数组作差分如:对上述数组做这些操作:a:[1,3]每个元素加2b:[2,4]每个元素减3…如果暴力求解是不一定能过的.写一个专门做差分的类:class Difference{ //差分数组 private int[] diff; //根据给定的数组构造初始化一个差分数组 public Differen原创 2022-05-26 09:14:55 · 498 阅读 · 0 评论 -
滑动窗口解决最小覆盖子串
滑动窗口解决最小覆盖子串https://leetcode.cn/problems/minimum-window-substring/题干:难度:hard给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。滑动窗口的思想其实就是双指针的配合使用本题我们将索引[left,right)所包含的区间定义为窗口将left和right都初始化为0,由于左闭右开,此时窗口中是不包含任何的字符的,right原创 2022-05-11 11:07:42 · 143 阅读 · 0 评论 -
反转链表+反转前N个链表+反转指定索引下的局部链表
反转链表+反转前N个链表+反转指定索引下的局部链表反转链表https://leetcode.cn/problems/reverse-linked-list/迭代式算法:(不作过多赘述)class Solution { public ListNode reverseList(ListNode head) { if(head==null||head.next==null) return head; ListNode prev=null; Lis原创 2022-05-10 10:02:41 · 344 阅读 · 9 评论 -
前缀和(算法)
前缀和(算法)一维:https://leetcode.cn/problems/range-sum-query-immutable/二维:https://leetcode.cn/problems/range-sum-query-2d-immutable/对一维的那个题:一般人的解法:class NumArray { private int[] arr; public NumArray(int[] nums) { arr=nums; } pu原创 2022-05-09 20:58:48 · 337 阅读 · 0 评论 -
最大子数组和
最大子数组和https://leetcode.cn/problems/maximum-subarray/dp本题旨在求最值,可以考虑使用dpdp难点在于如何确定状态及状态转移我们可以利用数学归纳的思想(如何利用dp[0…i-1]推导出dp[i])那首先要明确dp[i]是什么含义,这里可以先考虑将dp[i]直接理解为前i个子数组的最大子串和,这样定义状态时,此时dp[i]进行返回就是所求结果吗?或者可以问自己:这样定义状态可以得到合适的状态转移方程吗?答案是否定的;因为我们原创 2022-05-09 19:53:55 · 358 阅读 · 0 评论 -
最长递增子序列
最长递增子序列子序列不一定连续,子串一定连续dphttps://leetcode.cn/problems/longest-increasing-subsequence/明确状态:即原问题和子问题中一直发生变化的量,此处就是递增子序列的长度呗明确选择:dp[i]可以选择的前面一部分就是dp[0…i-1]明确base case:dp[i]显然至少为1,明确dp函数/数组的含义:dp[i]表示以nums[i]做结尾的子序列的最大长度,那整个dp函数的结果不就是返回dp[]中的最大值吗明确状态原创 2022-05-09 16:06:26 · 151 阅读 · 0 评论 -
凑零钱问题(dp)
凑零钱问题https://leetcode.cn/problems/coin-change/动规思路:明确最基本的情况:amount==0或者amount<0时得结果都是显而易见的明确状态:即原问题和子问题中会发生变化的量,此处amount显然是我们要找的状态明确选择:即什么样的行为会导致状态发生变化?此处正是我们去选择不同面值的硬币会导致状态发生变化明确dp函数的定义,该函数一定是要包含状态的,否则没法递归,其他变量视情况而定暴力穷举时间复杂度不过关,考虑备忘录做剪枝法原创 2022-05-09 11:19:15 · 348 阅读 · 0 评论