
算法题
Dominiczz
I have a big heart.
展开
-
记忆化搜索
的矩阵 ,要求选择一个起点,然后选择上下左右四个相邻方向之一开始行走,并且要保证行走的点的值比当前点小,即找一条单调递减的路径,要求这条路径最长。偏序关系其实就是代表了状态转移的方向,例如上面只允许值大的往值小的方向走,这就是一种偏序关系;今天每日一题可以用dp做,但是看答案有人用记忆化搜索,以前也经常听到这个名词,so今天好好来学一下,什么是记忆化搜索。因为在递归计算的时候,我们必须保证传入参数的合法性,所以这一步是必要的,比如坐标为负数之类的判断;的值,而不需要使用额外的变量。时,我们可以直接修改。原创 2024-03-15 17:35:25 · 848 阅读 · 0 评论 -
最小生成树Prim + Kruskal
通过这个例子可以看到,t.join(1, 3);还是t.join(3, 1);最后判断t.isSame(1, 3)都会是true。这里不能直接将isSame抽象出来,在join里面调用,必须寻根以后再。通过模板,我们可以知道,并查集主要有三个功能。这里直接用carl给的模板。原创 2024-02-28 18:33:50 · 408 阅读 · 0 评论 -
A*的python实现加讲解
自己在上面的基础上进行了一些小的改动。原创 2024-02-20 21:42:33 · 575 阅读 · 0 评论 -
floyd算法解析+python实现
python实现如下。graph如下图所示。原创 2024-02-20 21:35:47 · 567 阅读 · 0 评论 -
LFU算法
大致就是说LFUCache类维护一个存放node的map,同时维护两个双向链表,注意这个双向链表里面又包含了两个双向链表,访问的频率是first最大,last最小。其余的就是正常的双向链表的操作了(插入,删除)Leetcode有原题,之前手写过LRU,数据结构还是习惯于用java实现,实现是copy的评论题解。Least Frequently Used(最不频繁使用)原创 2024-01-24 17:07:33 · 434 阅读 · 0 评论 -
二分的一点理解
如果是元素不存在,也是找左右边界。search1此时是找6的左边界。其实就是找小于等于x的最后一个元素。search2此时是找6的右边界。其实就是找大于等于x的第一个元素。另一种写法,是判断元素存不存在的,直接三种if。如果是有重复元素,就是目标找左右边界。原创 2022-08-25 15:07:54 · 117 阅读 · 0 评论 -
offer17_19
【代码】offer17_19。原创 2022-08-22 14:09:16 · 113 阅读 · 0 评论 -
offer2_115
【代码】offer2_115。原创 2022-08-22 14:07:56 · 110 阅读 · 0 评论 -
lowbit运算
代码】lowbit运算。转载 2022-08-09 16:55:50 · 117 阅读 · 0 评论 -
leetcode622循环队列
代码】leetcode622循环队列。原创 2022-08-02 16:16:18 · 90 阅读 · 0 评论 -
2-n求质数
方法一:暴力解法方法2:埃及筛原创 2022-07-01 10:10:01 · 131 阅读 · 0 评论 -
KMP算法
leetcode28其实有点类似于动态规划,新加一个字母,匹配了就更新,没匹配就往前面回溯。(叙述有点乱,代码应该很清晰)KMP算法的关键就是求next数组,next数组一般有减一和不减一的形式,只是实现上的不同,这里习惯用减一的形式。初始化next数组,定义j和i,j代表子串的前缀末尾,i代表子串的后缀末尾。j=-1,代表next数组起始位置,因为后续所有的操作都是j+1,所以不会存在越界。i从1开始。next数组的值,代表最长相等前后缀的末尾,即最长相等前后缀的长度-1;1.原创 2021-08-10 00:10:08 · 348 阅读 · 0 评论 -
链表实现(用伪结点)
leetcode707单链表实现//先定义结点node class Node { int data; Node next; Node(){} Node(int data){this.data=data;} Node(int data,Node next){this.data=data;this.next=next;} } class MyLinkedList { Node hea原创 2021-07-11 15:41:14 · 311 阅读 · 1 评论 -
二分查找上界和下界(不含target)
二分法(这里采用左闭右闭)public int search(int[] nums, int target) { int left=0; int right=nums.length-1; int middle; while(left<=right){ middle=(left+right)/2; if(nums[middle]>target){ // 在左边 ..原创 2021-07-10 02:03:53 · 630 阅读 · 0 评论 -
滑动窗口求最小子序列,子序列只能有两种不同的数(904水果成篮)
import java.util.HashMap;public class leetcode3 { public static void main(String[] args) { int []tree = {1,2,3,1,2,2,2,1,1}; int ans= totalFruit(tree); System.out.println(ans); } public static int totalFruit(int[] tre.原创 2021-05-17 14:15:37 · 213 阅读 · 0 评论 -
大数阶乘
转载自https://blog.youkuaiyun.com/baidu_39663435/article/details/94293802?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161841451516780357245750%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161841451516780357245750&biz原创 2021-04-15 01:26:44 · 123 阅读 · 0 评论