算法笔记

以下是为您整理出来关于【算法笔记】合集内容,如果觉得还不错,请帮忙转发推荐。

【算法笔记】技术教程文章

算法笔记-跳表【图】

跳表是一种动态数据结构,可以支持快速的插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑树(Red-black tree)。Redis 中的有序集合(Sorted Set)就是用跳表来实现的。链表加多级索引的结构,就是跳表。 ? 在一个单链表中查询某个数据的时间复杂度是 O(n)。那在一个具有多级索引的跳表中查询任意数据的时间复杂度是 O(logn)。这 个查找的时间复杂度跟二分查找是一样的。换句话说,我们其实是基于单链表实现了二分查找。(...

算法笔记-二分查找【代码】

【二分查找】 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 ? 二分查找是一种非常高效的查找算法,时间复杂度是 O(logn)。O(logn) 这种对数时间复杂度,是一种极其高效的时间复杂度,有的时候甚至比时间复杂度是常量级O(1) 的算法还要高效。二分查找更适合处理静态数据,也就是没有频繁的数据插入...

算法笔记-判断链表保存的字符串是否是回文【代码】

<?php/*** 单链表节点** Class SingleLinkedListNode** @package Algo_06*/ class SingleLinkedListNode {/*** 节点中的数据域** @var null*/public $data;/*** 节点中的指针域,指向下一个节点** @var SingleLinkedListNode*/public $next;/*** SingleLinkedListNode constructor.** @param null $data*/public function __construct($data = null){$this->data = $data;$this->next = null;} }/*** 单链表** Class SingleLinkedL...

【算法笔记】B1040 有几个PAT【代码】

1040?有几个PAT?(25?分)字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。 现给定字符串,问一共可以形成多少个 PAT? 输入格式: 输入只有一行,包含一个字符串,长度不超过10?5??,只包含 P、A、T 三种字母。 输出格式: 在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。 输入样...

【算法笔记】B1047 编程团体赛【代码】

1047?编程团体赛?(20?分)编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。 现给定所有队员的比赛成绩,请你编写程序找出冠军队。 输入格式: 输入第一行给出一个正整数 N(≤10?4??),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0...

算法笔记第一天【代码】

变量类型: 1)int:绝对值在10^9范围内的整数都可以定义为int型。 2)long long:如果long long型赋大于 2^31-1 的值,则需要在初值后面添加 LL 否则会编译错误。 3)对于浮点型来说,碰到浮点型数据都应该用double来存储。 4)在C语言中,必须添加stdbool.h头文件。 位运算符: 一般的,无穷大的数 INF 可以设置成如下语句:const int INF = (1 << 30)- 1; const int INF = 0x3fffffff;常见数据类型变量的scanf格式符数据类型 ...

【算法笔记】B1024 科学计数法【代码】

1024?科学计数法?(20?分)科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。 输入格式: 每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字...

【算法笔记】B1018 锤子剪刀布【代码】【图】

1018?锤子剪刀布?(20?分)大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10?5??),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,...

算法笔记7.1 栈的应用【图】

1.自己实现栈的clear,size,empty,pop,top TOP本质上为最大元素的下标,栈空时为-1#include<iostream> #include<stack> using namespace std;const int MAXSIZE=1000;struct Stack{int st[MAXSIZE];int TOP; Stack(){//初始栈空 TOP=-1; }void clear(){TOP=-1;}int size(){return TOP+1;}bool empty(){if(TOP==-1) return true;else return false;}void push(int x){st[++TOP]=x;}void pop(){TOP--;}int top(){return st[TOP];}};v...

【算法笔记第6.9节 algorithm 】问题 A: 求最大最小数【代码】

题目描述 先输入N,表示数的个数,然后输入N个数,求这N个数的最大值和最小值。N<=10000,输入的数的绝对值不大于10^6 样例输入4 2 0 1 2 样例输出2 0 多组测试数组#include<stdio.h> #include<algorithm> using namespace std; int main() {int n;while(scanf("%d",&n)!=EOF){int a[10010];for(int i=0; i<n; i++)scanf("%d",&a[i]);sort(a,a+n);printf("%d %d\n", a[n-1], a[0]);}return 0; }