首页 > 编程语言 >复习-基础课-基础算法

复习-基础课-基础算法

时间:2023-07-16 16:04:03浏览次数:42  
标签:题目 复习 int mid msort 算法 基础课 排序

1.快速排序:不稳定,其他略。

2.归并排序:稳定,常用于求逆序对。

void msort(int l, int r)
{
    if(l >= r) return;
    int mid = (l + r) >> 1;
    msort(l, mid);
    msort(mid + 1, r);//递归排序 
    int k = 0;
    int i = l, j = mid + 1;
    while(i <= mid && j <= r)
    {
        if(a[i] <= a[j]) b[++ k] = a[i ++];//体现出来为何稳定了 
        else b[++ k] = a[j ++];
    }
    while(i <= mid) b[++ k] = a[i ++];//把剩余的部分加进去 
    while(j <= r) b[++ k] = a[j ++];
    for(int i = l; i <= r; i ++ ) a[i] = b[i - l + 1];//最后转移到原数组,完成排序 
}

3.二分:题目要求具有单调性,一般喜欢结合贪心考,即使没有单调性也能蒙分,代码略。

4.高精度:个人认为无意义,略,有空可能补一下。

5.差分与前缀和:针对具体题目巧妙应用,注意二维,高维还不会(也不太常用),其他略。

6.双指针:这是将 O(N^2) 优化到 O(n) 的强大算法。应用例:归并排序、kmp。

7.位运算:特点:快。能做很多事情,比如找规律(?),可以根据具体题目特性构造在二进制下答案。

      求 lowbit,即求一个数二进制下最低位 1 的位置。在树状数组里会经常用。常见写法:lowbit(x) = x & (-x)。

      位运算一定要加好括号,这个优先级比较玄学。不然哪一天自己怎么死的都不知道。

8.离散化

9.区间合并

标签:题目,复习,int,mid,msort,算法,基础课,排序
From: https://www.cnblogs.com/Moyyer-suiy/p/17557966.html

相关文章

  • 07、Raft算法简介
    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢。思考:etcd是如何基于Raft来实现高可用、数据强—致性的?1、什么是Raft算法Raft算法是现在分布式系统开发首选的共识算法。从本质上说,Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致......
  • JVM专栏-垃圾回收策略与算法
    程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而对于Java堆和方法区,我们只有在......
  • 欧几里得算法
    算法\(\gcd(a,b)=\gcd(b,a\modb)\)。整除的一些引理\(a\midb\),表示\(b\)能被\(a\)整除。当\(a\midb\)且\(b\mida\)时,\(a=\pmb\)。当\(k\mida,k\midb\)时,\(d\mid(ax+by)(x,y\in\mathbbZ)\)。证明:令\(k=\gcd(a,b)\),则有\(k\m......
  • [TSG开发日志4]算法组件、个人编写的库文件如何封装成DLL,如何更好地对接软件开发?
    写在前面这个内容确实是我有点疏忽了,我以为做算法的同事应该多少对这方面会有点了解的。但是我想了一下我刚毕业的时候,确实对这方面的理解不深,查了很多资料才勉强搞懂什么意思,也是后来随着工程学习的愈加深入,才渐渐了解了在C++开发中动态链接库的重要性及如何编写。一般在说一个......
  • 马尔可夫算法
    马氏模型的含义马尔科夫链观察式子当P{En=i,En-1=in-1,...,}=p{En=i},n-1之前发生的事都和现在无关例子:转移概率矩阵练习:第3条说的是不管初始状态是什么只要j趋于无穷,最后极限与初始状态无关,极限趋于一个定值正则矩阵:1、方阵,2、逆矩阵存在例题:这道......
  • 字符串算法入门笔记
    zhx:什么AC自动机,KMP算法从来不会考zhx:不推荐用string,因为麻烦读ans入一个字符串chars[MAXN];cin>>s+1;//从s[1]开始读入,操作时方便在遍历字符串时,我们要先把字符串长度存下来,因为计算字符串长度的函数strlen的时间复杂度为\(O(长度)\),如果写成for(inti=1;i<=strlen(s+......
  • 代码随想录算法训练营第三十一天| 62.不同路径 63. 不同路径 II
    62.不同路径思路:因为只能向左,和向下,因此只能是前面的加上左边的,递推公式较为简单代码:1intuniquePaths(intm,intn){2if(m==1||n==1)return1;34vector<vector<int>>nums(m,vector<int>(n,1));56for(inti=1;i<m;i++......
  • 搜索和图论_复习
    DFSAcWing842.排列数字代码#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;constintN=10;intpath[N];boolst[N];intn;voiddfs(intx){if(x>n)return;for(inti=1;i<=n;i++){if(st[i]==1)continu......
  • 【算法】在各种排列组合下,计算零钱找零方式数量
    写一个函数,在给定一系列硬币面额的情况下,计算你可以用多少种不同的方式来兑换一笔钱。例如,如果你有面额为1和2的硬币,有3种方法可以为4找零:1+1+1+1,1+1+2,2+2。硬币的顺序无关紧要:1+1+2==2+1+1此外,假设你有无限数量的硬币。示例调用,一个金额和一系列独特面额的硬币:CountCombin......
  • 文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题
    文心一言VS讯飞星火VSchatgpt(59)--算法导论6.43题三、对于一个按升序排列的包含n个元素的有序数组A来说,HEAPSORT的时间复杂度是多少?如果A是降序呢?文心一言:对于一个按升序排列的包含n个元素的有序数组A来说,HEAPSORT的时间复杂度是O(nlogn)。这是因为HEA......