首页 > 编程语言 >随笔,这学期最后一天的算法学习

随笔,这学期最后一天的算法学习

时间:2024-05-31 21:55:26浏览次数:21  
标签:deque parent int long 学期 算法 Edge new 随笔

最近没写什么笔记,并不是因为懒了。而是和我上一次大片时间咕了笔记一样:备战蓝桥杯。

这种时候我一般都会力扣上刷刷题:距今为止,力扣一共刷了142道题,一大半的中等题和一部分简单题以及一点点困难题。

在备战的最后一天,我又通过历年卷(其实只有去年)学习了快速幂求逆元,最小生成树以及单调队列三个问题。希望明天能有涉及,希望这次能够拿个奖吧,最低的就行,希望不枉我最近的努力。明天去参赛不仅要比早八起得还早而且还要自己打车去。。。主要是拿奖了明年学校还会发钱,狠赚笔!

明天结束了我也要赶紧收收心继续面向开发了,战场在即!

贴一下上述三个java实现的代码

1.快速幂求逆元(小费马定理)

long qmi(long base,long e,long p) {
        long res=1;
        base%=p;
        while(e>0) {
            if((e&1)==1)
                res=res*base%p;
            base=base*base%p;
            e>>=1;
        }
        return res;
    }
    long niyuan(long a,long b) {
        return qmi(a, b-2, b);
    }

2.最小生成树(克鲁斯卡尔算法)

    static class Edge{
        int from;
        int to;
        int weight;
        public Edge(int from,int to,int weight) {
            // TODO 自动生成的构造函数存根
            this.from=from;
            this.to=to;
            this.weight=weight;
        }
    }
    static void kruskal(Edge[]edges,int n) {
        int parent[]=new int[n];
        for(int i=0;i<n;i++) {
            parent[i]=i;
        }
        Arrays.sort(edges,Comparator.comparing(e->e.weight));
        for(Edge edge:edges) {
            int x=edge.from;
            int y=edge.to;
            int xRoot=isParent(parent, x);
            int yRoot=isParent(parent, y);
            if(xRoot!=yRoot) {
                parent[xRoot]=yRoot;
                System.out.println(edge.from+"-"+edge.to+"-"+edge.weight);
            }
        }
        
    }
    static int isParent(int[]parent,int i) {
        if(i!=parent[i])
            parent[i]=isParent(parent, parent[i]);
        return parent[i];
    }
    public static void main(String args[]) {
        Edge[]edges= {
                new Edge(0, 1, 2),
                new Edge(0, 3, 6),
                new Edge(1, 2, 5),
                new Edge(1, 4, 3),
                new Edge(2, 4, 6),
                new Edge(3, 4, 1),
        };
        kruskal(edges,5);
    }

3.单调队列(一维滑动窗口求最大值)

public int[] maxSlidingWindow(int[] nums, int k) {
        int length=nums.length;
        Deque<Integer>deque=new ArrayDeque<>();
        
        for(int i=0;i<k;i++) {
            while(!deque.isEmpty()&&nums[i]>nums[deque.peek()]) {
                deque.poll();
            }
            deque.offer(i);
        }
        int ans[]=new int[length-k+1];
        ans[0]=nums[deque.peek()];
        for(int i=k;i<length;i++) {
            while(!deque.isEmpty()&&nums[i]>nums[deque.peekLast()])
                deque.poll();
            deque.offer(i);
            while(deque.peek()<=i-k){
                deque.poll();
            }
            ans[i-k+1]=nums[deque.peek()];
        }
        
        
        return ans;
    }

 

标签:deque,parent,int,long,学期,算法,Edge,new,随笔
From: https://www.cnblogs.com/kun1790051360/p/18225330

相关文章

  • 算法金 | 突破最强算法模型,决策树算法!!
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」1.引言今天我们唠唠吴恩达:机器学习的六个核心算法!之决策树算法。决策树是一种用于分类和回归的机器学习算法。它通过一系列的决策规则将数据逐步划分,最终形成一个类似......
  • 程序分享--大厂常见算法/编程面试题:O(1) 时间插入、删除和获取随机元素
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。或关注博主免费专栏【程序......
  • 对KM算法暂时性的理解
    假设我们现在循环到了第\(i\)个点,且前面\(i-1\)个点都已经被匹配了,现在的相等子图为\(S\)在\(A_i+\delta,B_i-\delta\)后,相等子图变成了\(S'\):对于匹配边,其两端要么都在交错树中要么都不在交错树中,不可能出现一端在一端不在的情况,所以匹配边仍然在\(S'\)中对于交错树上的边,显然......
  • 【LeetCode算法】第101题:对称二叉树
    目录一、题目描述二、初次解答三、官方解法四、总结一、题目描述二、初次解答1.思路:递归判定左子树和右子树是否对称。用一个新函数sym来递归判定左子树和右子树是否对称。该函数细节:判定当前传入的两个根节点是否为空,若均为空则返回true,若只有其中一个为空则返回fa......
  • 代码随想录算法训练营第四十五天 | 1049. 最后一块石头的重量 II、494. 目标和、474.
    1049.最后一块石头的重量II视频讲解:动态规划之背包问题,这个背包最多能装多少?LeetCode:1049.最后一块石头的重量II_哔哩哔哩_bilibili代码随想录解题思路直接将这一些石头,分为两堆,让他们尽可能相似,然后再相撞,就是最小值1.dp[j]背包容量为j所背的最大价值2.dp[......
  • 【算法】位运算——常见位运算基础操作总结
    位运算基础操作总结,包括基础运算符+修改某位bit位目录1.基础位运算符2.按位基础操作1.给一个数n,确定其二进制的第x位是0/12.将一个数n的二进制标识的第x位修改成13.将一个数n的二进制标识的第x位修改成04.提取一个数n二进制中最右侧的1(除了最右......
  • 【备战蓝桥杯】蓝桥杯省一笔记:算法模板笔记(Java)
    蓝桥杯0、快读快写模板1、回文判定2、前缀和3、差分4、二分查找5、快速幂6、判断素数7、gcd&lcm8、进制转换9、位运算10、字符串常用API11、n的所有质因子12、n的质因子个数13、n的约数个数14、n阶乘的约数个数15、n的约数和16、阶乘&双阶乘17、自定义升序降序18、动态......
  • 代码随想录算法训练营day10(栈与队列)
    代码随想录算法训练营day10(栈与队列):学习内容:std::queue和std::stack是C++标准库中提供的队列和栈的容器适配器,它们分别基于队列和栈的概念,提供了一组简单的操作接口。std::queuestd::queue是一个先进先出(FIFO)的队列容器适配器。它提供了队列的基本操作,包括入队(pus......
  • Python实现SMA黏菌优化算法优化XGBoost回归模型(XGBRegressor算法)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。1.项目背景黏菌优化算法(Slimemouldalgorithm,SMA)由Li等于2020年提出,其灵感来自于黏菌的扩散和觅食行为,属于元启发算法。具有收敛速度快,寻优能力强的特点。主......
  • Python实现SMA黏菌优化算法优化LightGBM回归模型(LGBMRegressor算法)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。1.项目背景黏菌优化算法(Slimemouldalgorithm,SMA)由Li等于2020年提出,其灵感来自于黏菌的扩散和觅食行为,属于元启发算法。具有收敛速度快,寻优能力强的特点。主......