算法学习
上兰杂技师
这个作者很懒,什么都没留下…
展开
-
算法笔记学习:入门篇2 其他高效算法
打表打表是一种典型的用空间换时间的技巧,一般指将所有可能用到的结果事先计算出来,后面需要时直接查表获得。其常见的用法有以下几种:在程序中一次性计算出所有后面可能遇到的结果,之后直接查询获取在程序B中分一次或多次计算出所有需要用到的结果,手工把结果写在程序A的数组中,然后在程序A中直接使用这些结果在部分场合中,先暴力计算小规模数据的结果,然后通过找规律的方式解决问题递推在部分题目中找到合适的递推关系可能会极大降低题目的复杂度和解题时的时间复杂度...原创 2020-09-08 20:20:53 · 217 阅读 · 0 评论 -
算法笔记学习:入门篇2 two pointers(待补充)
two pointers 简介引例:给定一个递增的正整数序列和正整数M,求序列中两个不同位置的数a和b,使他们的和恰好为M。输出所有满足条件的方案对于引例中的问题,最直观的方法是采用二重嵌套循环,但这个方法复杂度为O(n2),在序列较大时是不可接受的...原创 2020-09-06 17:36:06 · 268 阅读 · 0 评论 -
算法笔记学习:入门篇2 二分(待补充)
二分查找引例:猜数字——玩家A从一个区间中选择一个数x,玩家B去猜测这个数。在猜测时,如果B猜测的数字不等于x,则以这个数字和x的大小关系截取新的区间来缩小猜测范围。显然,每次猜测时选择当前范围的中间数就可以快速逼近正确答案。这个游戏背后是一个经典文艺问题:如何在一个严格递增序列A中找到给定的数x。最直接的办法是线性扫描序列中的所有元素,直到找到x。但这种序列查找的方式复杂度为O(n),当待查询序列很大时,这个方法就不太能够接受了。更好的方法是使用二分查找——每次测试找到待查询序列的中间位置并与待查询原创 2020-08-19 17:07:29 · 99 阅读 · 0 评论 -
算法笔记学习:入门篇2 贪心(待补充)
简单贪心贪心法是求解一类最优化问题的方法,它总是考虑在当前状态下局部最优或较优的策略,来使全局达到最优或较优原创 2020-08-10 18:46:38 · 208 阅读 · 2 评论 -
算法笔记学习:入门篇 2 递归
分治分解:将原问题分解为若干和原问题结构相同或相似的子问题解决:递归求解所有子问题合并:将子问题的解合并为原问题的解递归实现分治法案例:阶乘案例:斐波那契数列案例:全排列一般称将1~n这n个整数按某个顺序摆放的结果称为这n个整数的一个排列,而全排列是指这n个整数能够形成的全部排列。现在需要实现按字典序实现 1 ~ n 的全排列。其中,(a1,a2,…,an)字典序小于(b1,b2,…,bn)是指存在一个i,使得a1=b1,a2=b2,…,a(i-1)=b(i-1),ai<b原创 2020-08-07 17:21:12 · 99 阅读 · 0 评论 -
算法笔记学习Part2:入门篇1——字符串处理
题目描述给定一句英语,要求编写程序,将句中所有单词倒序输出输入格式测试输入包含一个测试用例在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格输出格式每个测试用例的输出占一行,输出倒序后的句子样例输入Hello World样例输出World Hello解决方案#include<cstdio>#include<cstring>int ma原创 2020-08-02 16:56:22 · 147 阅读 · 0 评论 -
算法笔记学习Part2:入门篇1——计算日期差值
题目描述有两个日期,求两个日期之间的天数。若两个日期是连续的,则规定他们之间的天数是两天输入格式有多组数据,每组数据有两行,分别表示两个日期,格式为YYYYMMDD输出格式每组数据输出一行,即日期差值解决方案基本思路:将较小的日期按天数逐渐累加到较大的日期,过程中记录累加次数,最终得出之间天数#include<cstdio>//定义month数组存储平年闰年的每个月份天数方便直接读取int month[13][2] = { {0,0},{31,31},{28,29},{原创 2020-08-02 15:17:29 · 199 阅读 · 0 评论 -
算法笔记学习Part1:C/C++快速入门
知识杂记int 类型的使用范围:一般在 10^9 以内long long 类型赋大于 2^31-1 的初值需要加后缀 LL\0 代表 NULL关于移位运算符的使用(略)在printf输出时,可以采取一些手段规范输出格式:%md 右对齐输出,用空格补齐%0md 右对齐输出,用0补齐%.mf 保留m位输出,四舍六入五成双可以使用 getchar 和 putchar 读取和输出字符 (getchar可识别换行符,在putchar输出时自动换行)(getchar需要手动输入\0)常用的math原创 2020-08-01 17:38:46 · 151 阅读 · 0 评论 -
算法笔记学习Part3:入门篇 2 排序(待补充)
第四章 入门篇(2)——算法初步4.1 排序4.1.0 冒泡排序冒泡排序是排序算法中最基础的一种,其本质在于交换:每次通过交换将剩余元素的最大(小)值移动到一端,而当剩余元素减少为0时,排序结束。1.下面是冒泡排序的常规实现:for (int i = 0; i < list.length-1; i++) { for (int j = 0; j < list.length-1...原创 2020-05-20 09:24:10 · 156 阅读 · 0 评论 -
算法笔记学习Part3:入门篇 2 散列(例题待更新)
散列的定义与整数散列散列的定义——将元素通过一个函数转换为整数,使得该整数可以尽量唯一的代表这个元素在这个过程中,这个转换函数称为散列函数H,原始元素记为key,那么转换后的整数就是H(key)常用散列函数对于key是整数的情况,常用的方法有直接定址法,平方取中法和除留余数法,其使用如下:直接定址法1.H(key) = key //恒等变换2.H(key) = a * key + b; //线性变换平方取中法(待补充)除留余数法H(key) = key % mod;关原创 2020-05-20 09:23:53 · 238 阅读 · 0 评论 -
算法学习——算法竞赛入门经典(第一部分:语言篇)(第五章未更新)
第一章:程序设计入门第二章:循环结构程序设计原创 2020-02-14 18:37:26 · 313 阅读 · 0 评论