蒟蒻的总结
主要总结了排序、前缀和(偷懒)、差分(偷懒)、离散化和区间和并问题。
还没学哈希表、二叉树啥的 ,学了之后会更新的新的做法的!
大部分都来自Acwing啦!

1.快速排序
用指针左右往中间走的原理
left是左边界,right是右边界
模板:

void quick_sort(int a[],int l,int r){if(l>=r) return ;int i=l-1,j=r+1,x=a[l+r>>1];while(i<j){do i++;while(a[i]<x);do j--;while(a[j]>x);if(i<j) swap(a[i],a[j]);}quick_sort(a,l,j);quick_sort(a,j+1,r);
}

2.归并排序
利用的分治的思想,先排到最下面,然后再一步一步复原回来。
left是左边界,right是右边界
模板:

int a[N],temp[N];
void merge_sort(int a[],int l,int r){if(l>=r) return ;int mid=l+r>>1;merge_sort(a,l,mid);merge_sort(a,mid+1,r);int i=l,j=mid+1,k=0;while(i<=mid&&j<=r){if(a[i]<=a[j]) temp[k++]=a[i++];else temp[k++]=a[j++];}while(i<=mid) temp[k++]=a[i++];while(j<=r) temp[k++]=a[j++];for(i=l,j=0;i<=r;i++,j++) a[i]=temp[j];
}

3.二分查找
通过不停缩小离目标的距离来寻找要寻找的数
要注意边界问题
没有模板 就直接用题目好了
题目1(整型)
题目2(浮点型)
4.高精度
python 无敌
输入时有空行问题用python:

a=input()
b=input()
print(a+b)

无空行直接利用数组处理 python3:

num = input()
nums = num.split()
print(int(nums[0])+int(nums[1]))

如果利用C++的话 要注意去零问题,具体方法利用数组存储计算进位就好
5.前缀和* (矩阵的就不写了)
预处理,构造一个前缀和数组,有利于节省效率 不用再遍历
从1开始!
模板:
读入的时候

void Prefix_sum(int n){for(int i=1;i<=n;i++){s[i]+=s[i-1]+a[i];}
}

输出的时候:(表示从l到r的和)

void Out(int l,int r){cout<<s[r]-s[l-1]<<endl;
}

6.差分 (也不写矩阵^^)
相当于前缀和的逆过程,例如我们在l到r的区间内都加上一个数 我们可以不通过遍历就求出来
这样我们构造一个insert函数就好了
这样的情况下
我们输入的时候把a数组一起输入就可以了
代码如下:

void insert(int l,int r,int c){b[l]+=c;b[r+1]-=c;
}
int main(){int n,q;cin>>n>>q;for(int i=1;i<=n;i++) {cin>>a[i];insert(i,i,a[i]);}while(q--){int l,r,c;cin>>l>>r>>c;insert(l,r,c);}for(int i=1;i<=n;i++) {b[i]+=b[i-1];}              //复原,b数组就是我们经过各种变化后的数组了}

7.双指针算法
这是一个思想,通过两个指针优化运行过程,节省效率
这是我leetcode第三题( 无重复字符的最长子串)的解法:

class Solution {public:int lengthOfLongestSubstring(string s) {int b[1000]={0};int total=0;int len=s.size();for(int i=0,j=0;i<len;i++) {b[s[i]]++;while(b[s[i]]>1){b[s[j]]--;j++;}total=max(total,i-j+1);}return total;}
};

8.离散化
当我们要用一个大区间存少量的数,并且对它们进行加减乘除等操作的时候
由于这些数比较少,而存储区间又比较大,我们可以建立一个映射,然后利用上面提到的构造一个前缀和数组来解决问题。
题目(区间和)
另一篇有讲:关于离散化求区间和问题
代码如下:

#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
typedef pair<int ,int > II;
const int N=300010;
int a[N],s[N];
vector<II> A,C;
vector<int> B;
int n,m;
int find(int x){int l=0,r=B.size()-1;while(l<r){int mid=l+r>>1;if(B[mid]>=x) r=mid;else l=mid+1;}return r+1;
}
vector<int>::iterator unique(vector<int> &a){int j=0;for(int i=0;i<a.size();i++){if(!i||a[i]!=a[i-1])a[j++]=a[i];}return a.begin()+j;
}
int main(){ios::sync_with_stdio(false);cin>>n>>m;for(int i=0;i<n;i++){int x,c;cin>>x>>c;A.push_back({x,c});B.push_back(x);}for(int i=0;i<m;i++){int l,r;cin>>l>>r;B.push_back(l);B.push_back(r);C.push_back({l,r});}sort(B.begin(),B.end());B.erase(unique(B),B.end());for(auto item : A){int x=find(item.first);a[x]+=item.second;}for(int i=1;i<=B.size();i++) s[i]+=s[i-1]+a[i];for(auto item : C){int l=find(item.first),r=find(item.second);cout<<s[r]-s[l-1]<<endl;}return 0;
}

9.区间合并
给我们多个区间,然后把它们合并,最后输出有多少个单独的区间
构造一个pair,然后把他们排序,再逐个对比,整合就OK了
代码如下:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=100010;
pair<int ,int > a[N];
int n,cnt;
int main(){ios::sync_with_stdio(false);cin>>n;for(int i=1;i<=n;i++){cin>>a[i].first>>a[i].second;}sort(a+1,a+1+n);cnt=n;for(int i=1;i<n;i++){if(a[i].second>=a[i+1].first){cnt--;a[i+1].first=a[i].first;a[i+1].second=max(a[i+1].second,a[i].second);}}cout<<cnt;return 0;}

1.0的总结就到这里了,基础算法总共学了16天,接下来要开始数据结构了^^

学习记录1.0(基础算法)相关推荐

  1. java基础案例教程前4章知识点_java学习记录4 Java基础知识点

    java学习记录4 Java基础知识点 1. 注释 单行注释 使用"//"开头,后面是注释的内容 一般在要注释的语句的上面加注释 多行注释 以"/*"开头,以& ...

  2. Python学习笔记 1.0 基础内容篇章

    Python学习笔记 1.0 基础内容篇章 注释 变量 一.定义变量 二.使用变量 bug和debug bug: Debug工具: 数据类型 认识数据类型 在定义数据类型时发生的错误: 数据类型的补表 ...

  3. Java学习路线(语法基础+算法与数据结构部分)

    后端开发学习经验 首先,对于软件基础知识的学习,建议尽可能地去看一些经典的书籍,看第一遍的时候可以不用太过细致,快速地看,重在了解这本书的知识框架,在把握了整体的逻辑框架之后,第二遍就可以详细学习各章 ...

  4. 某宝付费买的价值上万的60G的Python学习资源,0基础轻松赚钱到手软,请低调使用,禁止外传~...

    你是否 还在为升职加薪发愁? 苦于领导看不到自己更多长处? 还在为房贷,车贷,生计而发愁? 苦于不上班如何轻松赚快钱补贴家用? 为了帮助财务.设计.运营.策划.销售.HR.金融从业者.电商从业者.创业 ...

  5. ICP算法学习记录(包括基础概念,计算推导)

    首先,ICP,全称叫做(Iterative Closest Point,迭代最近点),在slam中用来做点云匹配,点云匹配就是将同一个物体,在不同视角下的两组或多组点云,通过旋转加平移让他们匹配起来. ...

  6. 学习记录:计算机网络基础知识总结

    计算机网络(第7版)谢希仁 阿里云盘 链接:https://www.aliyundrive.com/s/eLhv9FKkeW4 学习笔记:https://note.youdao.com/s/a5HE1 ...

  7. mysql mysql is a_MySQL学习记录1(基础)(MySQL in a nutshell)_MySQL

    记得当时腾讯实习生一面的时候被面试官问会不会用数据库,我回答会,但是只会比较基础....最后还被问这么多东西掌握得不好(幸好没用"不会"),为什么不找时间补补.....被狠狠地鄙视 ...

  8. python从零开始到精通_「Python 入门学习指南」0基础小白助你从入门到精通!

    Python比较简单,非常适合初学者入门,内置了各种库,还有丰富的大约13万第三方库,掌握了语法和编程思维后,可以直接使用这些库做出自己的产品.这篇 Python 入门学习指南,针对没有任何编程经验. ...

  9. Internet学习记录:互联网基础

    互联网基础 Internet工作原理 Internet是一个分组交换系统 路由器是Internet实现互连的"标准件" TCP/IP是Internet的核心协议 客户机/服务器的工 ...

最新文章

  1. 梁胜博士亲解Rancher 2.0:K8s之上的Rancher魔法
  2. mysql 查询优化 Explain关键字 高性能mysql笔记
  3. JUC多线程:系统调用、进程、线程的上下文切换
  4. Json 时间 转换为 Javascript 时间 Date Jquery 调用WCF
  5. Asp.Net Core 轻松学-正确使用分布式缓存
  6. Java如何控制用户输入的长度,用Java Applet 进行Web编程时,如何限制输入域中可输入字符的长度!解决后马上给分!!!...
  7. GDB调试技术(一)
  8. spring boot入门小案例
  9. linux利用* vim提权,Linux使用suid vim.basic文件实现提权
  10. 接口测试人员需要掌握的知识技能
  11. 【格雷码】LeetCode 89. Gray Code
  12. linux常用指令(持续更新……)
  13. js 实现60秒倒计时
  14. Intel处理器将被苹果M1处理器降维式打击
  15. endNote教程 -4-编辑参考文件格式
  16. 习题 4.4 求a,b,c阶乘和的值,用一个函数fac(n)求n的阶乘。a,b,c的值由主函数输入,最终得到的值在主函数中输出。
  17. swiper 轮播 多行多列 横向排列
  18. 【图像修复】基于滤波实现损坏图像修复含Matlab源码
  19. An 8-year-old English girl who called out a major retailer as
  20. 表达式求值问题数据结构课程设计

热门文章

  1. html5网页设计 薛之谦个人网页适用个人博客网页模板
  2. FFmpeg源代码简单分析-其他-日志输出系统(av_log()等)
  3. 丰巢“羊毛”,出在快递身上,让用户买单!
  4. 蓝牙耳机南卡和vivo哪个好用?南卡与vivo实际评测!
  5. 用Python画论文折线图、曲线图?几个代码模板轻松搞定!
  6. IPV6邻居发现协议(NDP)
  7. 大华平台linux密码,大华DSS平台低权限账户越权直接修改system密码
  8. 小米误删userdata分区,userdata分区无法还原,安卓误删分区,且能进twrp,刷机卡米的情况,重新分区教程
  9. 人民币和美元兑换的编程python_python人民币和美元转换
  10. java 累加函数_请你编写一个方法(函数),功能要求从参数x累加到y,并返回累加后的整数结果。...