![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
小-豪-豪
这个作者很懒,什么都没留下…
展开
-
Mysql和B+数
基本搜索结构:B-树的插入分析:B+树相比B树的变化:B+树是B树的变形,也是一种多路搜索树,其定义基本与B树相同,除了:1、一个节点中关键字的数量和孩子的数量相等(规则简洁)。2、所有值都要出现在叶子节点上,非叶子节点中的值只是充当路径索引,并且叶子节点要链接起来(方便遍历),非叶子节点由叶子节点的最小值构成。3、为所有叶子节点增加一个链指针。4、所有关键字都在叶子节点出现。5、非叶子节点的子树指针p[i],指向关键字值属于【k[i], k[i+1]】的子树。原创 2020-09-09 22:46:44 · 680 阅读 · 0 评论 -
十大经典排序算法总结
1、冒泡排序1、对前n个元素从头到尾两两进行比较,如果第一个比第二个大,就交换他们两个,最后得到的最后一个元素就是前n个元素的最大值。2、然后对前n-1个、前n-2个…,一直到前两个元素进行第一步操作,依次得到他们里面的最大值。3、进行n-1次第一步的操作后就将元素排序好了。平均时间复杂度:O(n^2)最差时间复杂度:O(n^2)空间复杂度:O(1)数据对象稳定性:稳定(相同的元素排序后相对位置不改变)#include <stdio.h>#include <iostrea原创 2020-07-25 22:59:30 · 259 阅读 · 0 评论 -
分析STL中的sort算法
而在目前的排序中,快排平均情况下是性能最好的一种排序,但是快排也有其自身的短板,比如说:元素接近有序、元素量比较大的情况下,直接使用快排时,堪称一场灾难。因此STL中sort算法并没有直接使用快排,而是针对各种情况进行了综合考虑。sort函数提供了两个版本:sort(first, last):默认按照小于方式排序,排序结果为升序,一般用于排内置类型数据。sort(first, last, comp):可以通过comp更改元素比较方式,即可以指定排序的结果为升序或者降序,一般以仿函数对象和函数指针的原创 2020-07-25 22:02:37 · 273 阅读 · 0 评论 -
三分法解决假币问题
今天遇到一道题,第一眼就想到了用二分法来解决,可是二分法却没有通过,后来才知道三分法才是解决找假币最快的方法,题目描述如下:思路:当硬币的个数只有一个时,需要0次。当硬币个数为2时,需要1次。当硬币个数大于等于3时,我们按下面方法将硬币分为3堆:n%3=0,分为n/3、n/3、n/3三堆。由于要求最坏情况,我们先用天平对n/3和n/3检测,失败后再对n/3个硬币做三分法。n%3=1,分...原创 2020-04-02 20:59:40 · 4802 阅读 · 0 评论 -
两个超级大的整数做加法
最近做题经常碰到题目中说输入两个超级大整数,然后让童鞋对这两个超级大整数做运算,一开始我还因为题目有问题,哪有整形可以放得下这么大的整数,后来看了前人的做题思路后发现是我无知了,以下面这道题对这种方法做一个记录。题目描述:思路:用两个字符串来存放两个整数,然后用字符串模拟加法的运算,这样就可以对超级大的整数做加法运算了。#include <iostream>#include ...原创 2020-04-01 23:22:50 · 396 阅读 · 0 评论 -
不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:1、10进制的加法三步走(175+69)(1) 先不考虑进位,175+69得到134。(2)计算进位值,个位上5+9的进位为1,十位上的7+6的进位为1所以进位为11*10=110 (要乘以10是因为进一位相当于乘10)。(3)重复(1),(2),直到没有进位制产生,就结束了。(134+110=24...原创 2020-04-01 23:04:30 · 108 阅读 · 0 评论 -
使用蔡勒 (Zeller)公式由日期推算今天是星期几
历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式,其中最著名的是蔡勒 (Zeller)公式,即:W=[C/4]-2C+Y+[Y/4]+[13×(M+1)/5]+D-1或者是W=Y+[Y/4]+[C/4]-2C+[26×(M+1)/10]+D-1公式都是基于公历的置闰规则来考虑。 公式中的符号含义如下:W:星期C:年份前两位数Y:年份后两位数M:月(M的取...原创 2019-12-18 16:11:10 · 908 阅读 · 0 评论 -
牛客编程题分析(剑指offer C++):跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路:当台阶数是0、1、2时,青蛙的跳法分别为jump(0) = 0、jump(1) = 1、jump(2) = 2。当台阶数为3时,青蛙的第一跳有两种跳法,当第一次跳一个台阶时,剩下的台阶跳法就是jump(2),当第一次跳两个台阶时,剩下的台阶跳法就是jump(1),...原创 2020-01-05 11:18:19 · 181 阅读 · 0 评论 -
牛客编程题分析(剑指offer C++):变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:当只有一个台阶时只有一种跳法jump(1)=1。两个台阶时第一次跳如果跳一个,那么有jump(1)种跳法,第一次如果跳jump(n=2)个,那么有一种跳法,一共jump(2)=jump(1)+1种。三个台阶时第一次如果跳一个,那么有jump(2)种跳法,第一次如果跳2个...原创 2020-01-06 10:16:15 · 163 阅读 · 0 评论 -
栈的应用——四则运算表达式求值(逆波兰式)
逆波兰式也称为后缀表达式,也就是将运算符写在操作数之后。逆波兰式的作用:实现逆波兰式的算法,难度并不大,但为什么要将看似简单的中序表达式转换为复杂的逆波兰式?原因就在于这个简单是相对人类的思维结构来说的,对计算机而言中序表达式是非常复杂的结构。相对的,逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序。中缀表达式转后缀表达式:我们把平时...原创 2020-02-04 18:19:19 · 591 阅读 · 0 评论 -
二叉树的最近公共祖先节点
1、搜索二叉树(二叉搜索树)**概念:**一颗二叉树可以为空,如果不为空,满足以下性质:1、非空左子树的所有键值小于其根节点的键值。2、非空右子树的所有键值大于其根节点的键值。3、左右子树都是二叉搜索树。若二叉树是一个二叉搜索树,方法如下所述:从树的根节点开始和两个节点作比较,如果当前节点的值比两个节点的值都大,则这两个节点的最近公共祖先节点一定在该节点的左子树中,则下一步遍历当前节点...原创 2020-03-13 21:09:47 · 515 阅读 · 0 评论 -
判断一个数是不是素数
要判断一个数n是不是素数,我们将这个数除[2,sqrt(n)]中的数,如果有一个数可以整除,则说明这个数不是,如果所有的都不能整除,也就是余数不为0,则说明这个数是素数。#include <iostream>#include <cmath>using namespace std;bool isPrime(int n){ for (int i = 2; i &l...原创 2020-03-13 23:13:31 · 146 阅读 · 0 评论 -
动态规划编程题总结
1、跳石板小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6-&...原创 2020-03-16 14:23:21 · 310 阅读 · 0 评论 -
求一个整数在内存中的二进制形式所包含的1的个数(汉明重量)
1.最容易想到的方法:#include <stdio.h>int main(){ int num = 10; int count = 0;//计数 while (num) { if (num % 2 == 1) { ++count; } num = num / 2; } printf("二进制中1的个数 = %d\n", count); ret...原创 2020-03-18 11:32:23 · 200 阅读 · 0 评论 -
让我头疼的手套问题
题目描述:在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组l...原创 2020-03-21 18:16:11 · 232 阅读 · 0 评论 -
循环队列的两种实现方式
线性表有顺序存储和链式存储,队列作为一种特殊的钱性表,也同样存在这两种存储方式。队列顺序存储的不足我们假设一个队列有n个元素,则顺序存储的队列需建立一个大于n的数组,并把队列的所有元素存储在数组的前n个单元,数组下标为0的一端即是队头。所谓的入队列操作,其实就是在队尾追加一个元素,不需要移动任何元素,因此时间复杂度为O(1),如下图所示:与栈不同的是,队列元素的出列是在队头,即下标为0的位...原创 2020-02-06 15:40:14 · 3484 阅读 · 1 评论 -
求最大公约数以及最小公倍数
最大公约数(greatest common divisor因子, GCD)。最小公倍数(least common multiple倍数, LCM)。1.群举法首先给出两个数a和b,从两数较小的数开始,找到满足a和b同时可以被其整除的最大的约数。#include <stdio.h>int gcd(int a, int a){ int temp = 0; temp = (a...原创 2020-03-27 20:19:37 · 2042 阅读 · 0 评论