
算法
文章平均质量分 76
无名之辈W
不忘初心,方得始终
展开
-
算法和数据结构复习:稳定与非稳定排序、mysql的索引用的是B+树、智能指针、const与#define的区别、排序算法的时间复杂度
文章目录2020.10.07排序算法的一些思考:为什么要分稳定排序和非稳定排序?为什么MySQL要用B+树存储索引?2020.10.07排序算法的一些思考:为什么要分稳定排序和非稳定排序?答:稳定的排序算法有:冒泡、插入、归并排序;非稳定的排序算法有:快速排序、堆排序等。稳定排序的一个例子:比如班里的同学已经按照学号拍好序了。现在要按照身高进行排序。如果是稳定排序好之后,身高相同的同学,学号还是按顺序的。所以其实稳定排序就是有两个排序关键字的时候,稳定排序可以让第一个关键字排序的结果继续服务与原创 2020-11-04 22:21:58 · 174 阅读 · 0 评论 -
算法——递归的练习
文章目录Tips:注意文章中标红的地方,这些都是容易犯错的地方leecode面试题16.11——跳水板leecode1137——第N个泰波那契数leecode面试题 08.05. ——递归乘法Tips:注意文章中标红的地方,这些都是容易犯错的地方leecode面试题16.11——跳水板题目描述:面试题 16.11. 跳水板你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所原创 2020-08-25 23:08:05 · 380 阅读 · 0 评论 -
键指offer——面试题10:斐波那契数列(p73-79)、斐波那契的应用:青蛙跳台阶问题
文章目录题目描述递归和循环递归循环斐波那契数列(Fibonacci sequence)笔记long关键字unsigned题目描述题目一:求斐波那契数列的第n项。写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下:分析:方法一:递归方式,但效率不高,因为在斐波那契数列计算过程中重复的计算太多,因此时间复杂度是以n的指数方式递增的。long long Fibonacci(unsigned int n){ if(n = 0) return 0; i原创 2020-05-22 15:06:29 · 491 阅读 · 0 评论 -
键指offer——面试题24:反转链表、面试题25:合并两个排序的链表
面试题24:反转链表输入一个链表,反转链表后,输出新链表的表头。分析从院链表的头结点开始反转,先将头结点指向空指针,然后依次反转原链表中的节点,直到遍历到原链表的最后一个节点的下一个节点nullptr处,将其赋值为结果链表的头结点即结束。核心: 先让next移动next = node->next;,然后再反转node->next = pro;画图最好理解了,根据这个流程可以写出整体的框架,然后就是注意空链表与链表中只有一个元素的特殊情况处理即可。代码/** * Definitio原创 2020-08-04 15:50:19 · 111 阅读 · 0 评论 -
剑指offer——面试题41:数据流中的中位数 + make_heap()、push_heap()、pop_heap()的用法
题目描述:分析:代码:原创 2020-08-21 23:52:01 · 293 阅读 · 0 评论 -
十大经典排序算法之 —— 三、堆排序
堆排序堆(Heap)数据结构简介堆就是用数组实现的二叉树,所以它没有使用复指针或者子指针。堆满足性质:堆中的某个节点的值总是不大于或不小于其父节点的值堆总是一颗完全二叉树堆是非线性数据结构,相当于一维数组,有两个直接后继。一个从低到高有序排列的数组是以有效的最小堆,比如[ 10, 14, 25, 33, 81, 82, 99 ],我们可以将这个堆画出来:注意: 并不是每一个最小堆都是一个有序数组!要将堆转换成有序数组,需要使用堆排序。树的高度 是指从树的根节点到最低的叶节点所需要的步数原创 2020-08-21 22:12:12 · 365 阅读 · 0 评论 -
键指offer——面试题15:二进制中1的个数(p99-103)
题目描述请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例:9的二进制表示为1001,有2位是1。经典解法分析:让一个flag = 1,然后与n相与,相与结果为1的话就证明最后一个位置为1;然后让flag不断左移,与n相与,最终用count变量统计到原数n中1的个数。经典解法代码://求二进制中1的个数#include<iostream>using namespace std;int main(){ //经典解法 int n = 10; int fla原创 2020-06-28 16:57:32 · 1208 阅读 · 0 评论 -
深度优先搜索(DFS) + DFS的应用:字符串的排列问题
文章目录深度优先搜索**基本思路:****举例:****穷举:****深度优先算法思路:**DFS应用:全排列问题深度优先搜索深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。 深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。搜索算法是利用计算机的高性能来有目的的穷举一个问题的部分或所有的可能情况,从而求出原创 2020-06-19 20:48:03 · 630 阅读 · 0 评论 -
编程题:字符串循环左移(ROL)
题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!分析:用的是最简单以理解的方法,先将str的后k-len个字符输入到结果字符串,然后再将前k个字符输入到结果字符串。class Solution {public: string LeftRot原创 2020-06-04 12:04:48 · 1727 阅读 · 0 评论 -
变态跳台阶问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
编程题一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?分析对于n级台阶,第一步的跳法有n种:跳1级、跳2级、跳3级…跳n级跳1级,剩下的n-1级的跳法是f(n-1);跳2级,剩下的n-2级的跳法是f(n-2);跳3级,剩下的n-3级的跳法是f(n-3);…跳n-1级,剩下的1级的跳法是f(1);跳n级,剩下的0级的跳法是f(0)=0;所以f(n) = f(n-1)+f(n-2)+…+f(1)而f(n-1) = f(n-2)+原创 2020-06-04 10:48:51 · 1925 阅读 · 0 评论 -
十大经典排序算法之 —— 二、快速排序+算法图解第四章(快排、大O表示法)
第四章 快速排序4.1分而治之4.2 快速排序def QuickSort(array): if len(array) < 2: return array;#基线条件,为空或者只包含一个元素是“有序”,直接返回 else: pivot = array[0]#递归条件 less = [i for i in array[1:] if i<=pivot]#由小于基准值的所有元素组成的数组 greater = [i fo原创 2020-05-31 10:34:02 · 521 阅读 · 0 评论 -
LeeCode 198——打家劫舍,求数组中不相邻的数的最大和
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。输入: [2,7,9,3,1]输出: 12输入: [1,2,3,1]输出: 4分析:我最开始的思想就是求一个数组中的奇数和与偶数和,看哪个比较大,然后没有AC,所以看了评论用动态规划。还没好好理一原创 2020-05-30 16:41:48 · 346 阅读 · 0 评论 -
键指offer——动态规划与贪婪算法+面试题14:剪绳子(p94-p98)
动态规划(dp,Dynamic Programming)如果编程题是求一个问题的最优解(通常是最大值或最小值),而且该 问题能够分解为若干个子问题,并且子问题之间还有重叠的更小的子问题,就可以考虑用动态规划来解决。动态规划求解的问题的四大特点:求一个问题的最优解;整体问题的最优解是依赖各个子问题的最优解;大问题可以分成若干个子问题,这些子问题之间还有相互重叠的更小的子问题;从上往下分析问题,从下往上求解问题。由于子问题在分解大问题的过程中重复出现,为了避免重复求解子问题,可以从下往上的顺序原创 2020-05-30 11:19:40 · 387 阅读 · 0 评论 -
十大经典排序算法之 —— 一、冒泡排序
冒泡排序冒泡排序(Bubble Sort):它重复的走访过要排序的数列,每次比较两个元素,如果他们的顺序错误就将这两个数交换过来。走访数列的工作是重复的进行直到没有再需要交换,也就是排序已经完成。外层循环是因为总共要比较len次,内层循环是每次比较的值范围限制到len-1-i。算法名字“冒泡”的由来就是越小的元素会因为交换而慢慢的“浮”到数列的顶端。每回比较都得到一个最大值,因此内循环的限制条件应该是j<len-1-i;,因为循环到第i次会得到了i个最大值已经是被排好顺序的。C代码:原创 2020-05-27 18:38:21 · 357 阅读 · 0 评论