算法基础课模板
自学
Leo就是LEO
命、是失败者的借口。运、是成功者的谦词。
展开
-
算法笔记(二分法)
在严格递增序列中查找给定的数x#include<iostream>using namespace std;int binary(int a[],int l,int r,int x){//二分法区间是左闭右闭的区间 int mid; while(l<=r)//当l>r时结束 { mid=l+(r-l)/2; if(a[mid]==x)return mid; else if(a[mid]>x)r=mid-1; else l=mid+1; }原创 2022-02-22 22:01:45 · 175 阅读 · 0 评论 -
838. 堆排序
题目来源https://www.acwing.com/problem/content/840///如何手写一个堆?完全二叉树 5个操作//1. 插入一个数 heap[ ++ size] = x; up(size);//2. 求集合中的最小值 heap[1]//3. 删除最小值 heap[1] = heap[size]; size -- ;down(1);//4. 删除任意一个元素 heap[k] = heap[size]; size -- ;up(.原创 2022-02-14 17:40:30 · 69 阅读 · 0 评论 -
869. 试除法求约数
题目链接#include<iostream>#include<algorithm>#include<vector>using namespace std;vector<int> divisors(int n){ vector<int>res; for(int i=1;i<=n/i;i++)//从小到大枚举较小的那个约数即可 { if(n%i==0)//如果i是n的一个约数原创 2022-02-09 15:19:27 · 333 阅读 · 0 评论 -
828. 模拟栈
#include<iostream>using namespace std;const int maxn=1e6+10;int st[maxn]; int top=-1;//表示栈为空 int main(){ int n; cin>>n; for(int i=0;i<n;i++) { string s; cin>>s; if(s=="push"){ int x; cin>>x; st[++top]=x;.原创 2022-02-07 19:22:51 · 271 阅读 · 0 评论 -
799. 最长连续不重复子序列
#include<iostream>using namespace std;const int maxn=1e5+10;int a[maxn],b[maxn];int main(){ //k是最长连续不重复子序列元素的个数 int n,k=0; cin>>n; for(int i=0,j=0;j<n;j++) { cin>>a[j]; b[a[j]]++; while(b[a[j]]>1){ b[a[i]]-=1;.原创 2022-02-07 17:42:35 · 356 阅读 · 0 评论 -
790. 数的三次方根
给定一个浮点数n,求它的三次方根。输入格式共一行,包含一个浮点数 n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留 6 位小数。数据范围−10000≤n≤10000输入样例:1000.00输出样例:10.000000#include <iostream>using namespace std;int main() { double x; cin >> x; // 确定边界值 double l .原创 2022-01-20 21:24:41 · 4110 阅读 · 0 评论 -
789. 数的范围
给定一个按照升序排列的长度为n的整数数组,以及q个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回-1 -1。输入格式第一行包含整数 n 和 q,表示数组长度和询问个数。第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。接下来 q 行,每行包含一个整数 k,表示一个询问元素。输出格式共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回 -...原创 2022-01-20 21:13:40 · 77 阅读 · 0 评论 -
788. 逆序对的数量
给定一个长度为 nn 的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i个和第 j 个元素,如果满足 i<j 且 a[i]>a[j]],则其为一个逆序对;否则不是。输入格式第一行包含整数 n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤100000,数列中的元素的取值范围 [1,10^9]。输入样例:62 3 4 5 6 1输出样例:5方法一、归并排序#原创 2022-01-20 20:08:18 · 74 阅读 · 0 评论 -
C++中vector容器的常见用法总结
一、关于vectorvector是一个动态的序列容器,相当于一个size可变的数组。相比于数组,vector会消耗更多的内存以有效的动态增长。vector能更快的索引元素(就像数组一样),而且能相对高效的在尾部插入和删除元素。当需要使用vector的时候,需要包含头文件:#include <vector>,一般加上using namespace std;如果不加,则在调用时候必须用std::vector<...>这样的形式,即在vector前加上std::,这表示运用的是原创 2022-01-14 10:25:21 · 1496 阅读 · 1 评论 -
lowbit的理解
先把第k位移到最后一位看个位是几,x>>k&1#include<iostream>using namespace std;int main(){ int n=10; for(int i=3;i>=0;i--) { cout<<(n>>i&1); } //结果为1010 return 0; } lowbit(x)lowbit函数——提取该数二进制原码中最后一位1所在的位置lowbit(n原创 2022-01-07 16:33:18 · 530 阅读 · 0 评论 -
前缀和、差分
算法基础课原创 2022-01-06 17:36:42 · 232 阅读 · 0 评论 -
算法基础课(高精度)
高精度加法#include<iostream>#include<vector>using namespace std;const int maxn=1e6+10;//C=A+B vector<int>add(vector<int>&A,vector<int>&B){ vector<int>C; int t=0;//进位 for(int i=0;i<A.size()||i<B.size原创 2021-02-23 19:39:07 · 312 阅读 · 0 评论 -
算法基础课(排序)
快排#include<iostream>using namespace std;const int maxn=10010;int a[maxn];void quick_sort(int a[],int l,int r){ if(l>=r)return ;//判断边界 int x=a[l],i=l-1,j=r+1;//双指针 while(i<j) { do i++;while(a[i]<x); do j--;while(a[j]>x);原创 2021-02-22 22:16:44 · 104 阅读 · 0 评论 -
算法基础课(week1习题之第K个数)
引言现在市面上的机器学习教程大多先学习数学基础,然后学机器学习的数学算法,再建立机器学习的数学模型,再学习深度学习,再考虑落地。这其中每个环节都在快速发展,唯独落地特别困难。我们花费大量时间成本去学习以上内容,成本无疑很昂贵。所以我们不如先“盲人摸象”、“不求甚解”地探索下机器学习。如果想到自己的应用场景,再学以致用,深入探索。这无疑是使沉没成本最低的决策。本教程会浅显易懂,让你走的很快。但如果你想走的更远还请学习数学。当然我们也只是暂时放下数学,先构建自己的知识体系。我们不妨先抬头看路,找准适原创 2021-01-22 21:31:24 · 158 阅读 · 0 评论