入门

排序

sort函数

#include <algorithm>
using namespace std;//两行必须添加
sort(stu + num -k,stu + num, cmp);

sort(a,b,cmp);a起始位置,b结束的下一个位置,cmp排序条件(可没有,没有就是按增序排列)

sort(a,a + 4);

若a为数组,表示排序从第一个排到第四个,因为数组下标从0开始

cmp

bool cmp(student a, student b) {if(a.score != b.score) return a.score > b.score;else return strcmp(a.id,b.id) < 0;
}

1.如果两个学生分数不相同,那么分数高的排在前面
2.否则,将按姓名字典序小地排在前面

解释strcmp函数

strcmp(s1,s2)当s1的字典序小于s2时返回负数,相等返回0,大于返回正数
cmp中就是表示a的字典序小于b的字典序

排名

分数不同的排名不同,分数相同的排名相同但占用一个位置

stu[0].r = 1;for(int j = 1; j < n; j++) {if(stu[j].score == stu[j -1].score) {stu[j].r = stu[j - 1].r;}else {stu[j].r = i + 1;}}

散列

字符串hash初步

int hashFunc(char S[], int len) {int id = 0;for(int i = 0; i < len; i++) {if(S[i] >= 'A' && S[i] <= 'Z') {id = id * 52 + (S[i] - 'A');}else if(S[i] >= 'a' && S[i] <= 'z'){id = id * 52 + (S[i] - 'a') + 26;}}return id;
}

递归

全排列

#include <cstdio>
const int maxn = 11;
int n, P[maxn], hashTable[maxn] = {false};
void generateP(int index) {if(index == n+1) {for(int i = 1; i <= n; i++) {printf("%d",P[i]);}printf("\n");return;}for(int x = 1; x <= n; x++) {if(hashTable[x] == false) {P[index] = x;hashTable[x] = true;generateP(index + 1);hashTable[x] = false;}}
}
int main() {n = 3;generateP(1);return 0;
}

n皇后

#include <cstdio>
int count = 0;
void generateP(int index) {if(index == n+1) {bool flag = true;for(int i = 1; i <= n; i++) {for(int j = i + 1; j <= n; j++) {if(abs(i - j) == abs(P[i] - P[j]))flag = false;}}if(flag) count++;return;}for(int x = 1; x <= n; x++) {if(hashTable[x] == false) {P[index] = x;hashTable[x] = true;generateP(index + 1);hashTable[x] = false;}}
}

贪心

区间贪心

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 10;
struct Interval {int x, y;
}I[maxn];
bool cmp(Interval a, Interval b) {if(a.x != b.x) return a.x > b.x;else return a.y < b.y;
}
int main() {int n;while(scanf("%d",&n), n != 0) {for(int i = 0; i < n; i++) {scanf("%d %d", &I[i].x, &I[i].y);}sort(I, I + n, cmp);int ans = 1,lastX = I[0].x;for(int i = 0; i < n; i++) {if(I[i].y <= lastX) {lastX = I[i].x;ans++;}}printf("%d\n",ans);}return 0;
}

二分

二分法

#include <cstdio>
int binarySearch(int A[], int left, int right, int x) {int mid;while(left <= right) {mid = left + (right - left) / 2;if(A[mid] == x) return mid;else if(A[mid] < x) {left = mid + 1;}else {right = mid -1;}}return -1;
}
int main() {const int n = 10;int A[n] = {1,3,4,6,7,8,10,11,12,15};printf("%d %d",binarySearch(A,0,n-1,6),binarySearch(A,0,n-1,9));return 0;
}

快速幂

typedef long long LL;
LL binaryPow(LL a, LL b, LL m) {if(b == 0) return 1;if(b % 2 == 1) return a * binaryPow(a, b-1, m) % m;else {LL mul = binaryPow(a, b / 2, m);return mul * mul % m;}
}

迭代写法

typedef long long LL;
LL binaryPoq(LL a, LL b, LL m) {LL ans = 1;while(b > 0) {if(b & 1) {ans = ans * a % m;}a = a * a % m;b >> = 1;}return ans;
}

two points

two points

while(i < j) {if(a[i] + a[j] == m) {printf("%d %d\n", i, j);i++;j--;}else if(a[i] + a[j] < m) {i++;}else{j--;}
}

归并

递归实现

const int maxn = 100;
void merge(int A[], int L1, int R1, int L2, int R2) {int i =L1, j = L2;int temp[maxn], index = 0;while(i <= R1 && j <= R2) {if(A[i] <= A[j]) {temp[index++] = A[i++];}else {temp[index++] = A[j++];}}while(i <= R1) temp[index++] = A[i++];while(j <= R2) temp[index++] = A[j++];for(int i = 0; i < index; i++) {A[L1 + i] = temp[i];}
}
void mergeSort(int A[], int left, int right) {if(left < right) {int mid = (left + right) / 2;mergeSort(A,left,mid);mergeSort(A,mid+1,right);merge(A,left,mid,mid+1,right);}
}

快速排序

int Partition(int A[], int left, int right) {int temp = A[0];while(left < right) {while(left < right && A[right] > temp) right--;A[left] = A[right];while(left < right && A[left] < temp) left++;A[right] = A[left];}A[left] = temp;return left;
}
void quickSort(int A[], int left, int right) {if(left < right) {int pos = Partition(A, left, right);quickSort(A, left, pos - 1);quickSort(A, pos + 1, right);}
}

随机选择算法

#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int randPartition(int A[], int left, int rigt) {int p = (round(1.0*rand()/RAND_MAX*(right - left) + left);swap(A[p], A[left]);int temp = A[left];while(left < right) {while(left < right && A[right] > temp) right--;A[left] = A[right];while(left < right && A[left] < temp) left++;A[right] = A[left];}A[left] = temp;return left;
}
void randSelect(int A[], int left, int right, int K) {if(left == right) return;int p =randPartition(A, left, right);int M = p - left + 1;if(K == M) return;if(K < M) {randSelect(A, left, p - 1, K);} else {randSelect(A, p + 1, right, K - M);}
}
int main() {srand((unsigned)time(NULL));int sum = 0, sum1 = 0;scanf("%d", &n);for(int i = 0; i < n; i++) {scanf("%d",&A[i]);sum += A[i];}randSelect(A, 0, n - 1, n / 2);for(int i = 0; i < n / 2; i++) {sum1 += A[i];}printf("%d\n", (sum - sum1) - sum1);return 0;
}

算法学习过程入门篇(2)-算法初步相关推荐

  1. 算法笔记入门篇-多项式求和

    算法笔记入门篇-多项式求和 前言 1.题目描述 2.解题思路 3.代码实现 1.题目描述 给出两个多项式的系数,求出这两个多项式的乘积. 例如,第一个多项式为f(x)=2.4x+3.2,第二个多项式为 ...

  2. 【数据结构与算法】第二篇:算法部分

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.程序的时间和空间复杂度分析 (1)理解算法时间复杂度的表示法 ( ...

  3. 前海征信“好信杯”大数据算法大赛——入门篇笔记

    ctr+4/5注释 数据下载地址 1.先导入包: import pandas as pd import numpy as np import seaborn as sns import matplot ...

  4. 算法快速入门-基于《算法图解》的算法入门教程(3)

    目录 一.问题引入 二.图的介绍 三.广度优先搜索 四.实现图 五.实现算法 1.创建一个队列,用于检查要检查的结点 2.从队列中弹出一个结点 3.检查这个结点是不是原结点的邻居   a)是,则找到目 ...

  5. Flink sql入门篇-概念、初步实现

    目录 Flinksql入门前的概念 物化视图 动态表和连续查询 在流上定义表 连续查询 更新和追加查询 查询限制 表到流的转换 初步实现Flinksql 导入依赖 实现Flinksql 进一步实现Fl ...

  6. 入门神经网络优化算法(一):Gradient Descent,Momentum,Nesterov accelerated gradient

    入门神经网络优化算法(一):Gradient Descent,Momentum,Nesterov accelerated gradient 入门神经网络优化算法(二):Adaptive Optimiz ...

  7. 算法竞赛入门经典 第2版

    算法竞赛入门经典 包括算法竞赛入门经典训练指南.算法竞赛入门经典各章习题答案.算法竞赛入门经典(第二版) 链接:https://pan.baidu.com/s/1O-bGyhdCqYtRvSBpn7J ...

  8. 入门篇(二)模型:逻辑回归(一步步从原理到实现)

    <老饼讲解机器学习>专注于机器学习的学习网站http://ml.bbbdata.com/teach#187 目录 一.问题 二.逻辑回归的思想 三.模型表达式 四.损失函数 (一) 单个 ...

  9. 热烈推荐: A*算法 (启发式搜索的入门篇,必看)转载

    热烈推荐: A*算法 (启发式搜索的入门篇,必看)转载 (2005-10-8 21:56)在搜索式算法中,A*算法算是个分水岭.因为它引入了启发式估价函数,从"瞎搜"转化到了&qu ...

最新文章

  1. 微生物组数据库(http://egcloud.cib.cn)正式上线
  2. linux python脚本返回,在C/python中执行linux命令并得到返回值以及输出
  3. string:删除string中指定位置的字符?指定的所有字符?
  4. Python读入CIFAR-10数据库
  5. SAP UI5 应用开发教程之三十七 - 使用 Chrome 开发者工具 Console 面板进行元素审查试读版
  6. python import如何使用_python之import引用
  7. 该放弃正在堕落的“RNN和LSTM”了
  8. 知乎发布“战疫”数据报告:“新型肺炎”相关回答获17.3亿次阅读
  9. linux之curl使用技巧
  10. Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结
  11. 计算机软件测试方法文献,软件测试毕业论文参考文献
  12. VS 2013 所有产品密钥
  13. otrs软件_开源 IT 服务管理软件(ITSM) - OTRS
  14. 规格说明书:吉林市一日游
  15. Linux CentOS 7 多网卡配置bond模式 bond1 bond5 bond6
  16. 什么是迭代(die dai)
  17. 最好的生活方式:存钱,运动,读书,早起
  18. 判断苹果黑条_【苹果iPhoneXR评测】黑边厚也是苹果的“无奈之举”_苹果 iPhone XR_手机评测-中关村在线...
  19. 以下html标记语言表示网页标题的标记是,第8章 HTML标记语言.ppt
  20. 【bzoj 1616】: [Usaco2008 Mar]Cow Travelling游荡的奶牛 dp

热门文章

  1. 浏览器上查看微信公众号的所有历史文章
  2. 求解最小机器重量(回溯法/分支限界)
  3. 熟知ghost参数 恢复系统没烦恼【xpghost】
  4. 复旦大学管理学院2017年考博(高级微观经济学+管理理论综合)真题,高微老师上课资料
  5. 河北外国语学院计算机宿舍,2021年河北外国语学院新生宿舍条件和宿舍环境图片...
  6. jlink怎么调试linux程序_【转】ubuntu linux下openocd + gdb-insight 用Jlink调试arm程序
  7. 栈和队列的区别与栈和堆的区别
  8. wireshark 抓包使用教程
  9. sh shell实现自动杀死cpu占用最高的pid,同时当cpu超过95%自动重启apache
  10. c++中内存拷贝函数(C++ memcpy)详解