
算法
文章平均质量分 88
兰亭落雪
目的不能抵达怎么付出都是偏差。
展开
-
冒泡排序三部曲
什么是冒泡排序?冒泡排序的英文Bubble Sort,是一种最基础的交换排序。大家一定都喝过汽水,汽水中常常有许多小小的气泡,哗啦哗啦飘到上面来。这是因为组成小气泡的二氧化碳比水要轻,所以小气泡可以一点一点向上浮动。而我们的冒泡排序之所以叫做冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡一样,根据自身大小,一点一点向着数组的一侧移动。具体如何来移动呢?让我们来看一个栗子:有8个数组成一个无序数列:5,8,6,3,9,2,1,7,希望从小到大排序。按照冒泡排序的思想.原创 2021-06-08 20:59:13 · 217 阅读 · 0 评论 -
把数组排成最小数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。输入例如输入数组{3,32,321}输出则打印出这三个数字能排成的最小数字为321323代码:void PrintMinNumber(int* numbers, int length){ if(numbers == NULL || length ...原创 2019-04-09 16:18:43 · 111 阅读 · 0 评论 -
欧式距离与曼哈顿距离切与比雪夫距离
一、欧式距离,其实就是应用勾股定理计算两个点的直线距离二、曼哈顿距离,就是表示两个点在标准坐标系上的绝对轴距之和:图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。三、切比雪夫距离切比雪夫距离定义设平面空间内存在两点,它...原创 2019-04-26 10:13:51 · 2084 阅读 · 0 评论 -
构建乘积数组
一、题目给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。二、思路(1)如果没有不能使用除法的限制,可以用公式B[i]=A[0]*A[1]*.....*A[n-1]/A[i]表示,使用除法时要特别注意A[i]等于0的情况。(2)...原创 2019-04-27 11:40:31 · 128 阅读 · 0 评论 -
LeetCode除自身以外数组的乘积
一、题目给定长度为n的整数数组nums,其中n> 1,返回输出数组output,其中output[i]等于nums中除nums[i]之外其余各元素的乘积。二、思路思路:利用2个辅助数组去做。一个保存顺序遍历的乘积,一个保存逆序的乘积(可以一次遍历完成)。ins[0,0,0,0]ret[4,4,4,4]计算后:ins[1,2,6,24]...原创 2019-04-27 12:38:10 · 183 阅读 · 0 评论 -
正则表达式的匹配
一、题目请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。二、思路1、考虑特殊情况: (1)两个字符串都为空,返回true...原创 2019-04-27 12:59:17 · 301 阅读 · 0 评论 -
丑数
一、题目大意只包含因子2、3、5的数叫丑数,习惯上把1也看做丑数,求第1500个丑数。二、分析(1)常规做法,可对每个正整数依次遍历,直到找到第1500个丑数为止。(2)升级做法,创建丑数数组,里面的丑数都是丑数乘丑数因子2、3、5得到的。三、实现int getugly(int n){ if(n<=0)return 0; int ugly=new int(n)...原创 2019-05-03 13:23:50 · 112 阅读 · 0 评论 -
字符串中只出现过一次的字符
一、题目在字符串中找到只出现一次的字符,如“abaccd”,返回‘b’二、分析借用哈希表。只有256个字符,故可以自实现哈希表。三、实现char getfist(char *str){ if(str==nullptr)return '\0'; int hashsize=256; int hashtable[hashsize]; for(int i=0...原创 2019-05-03 13:43:33 · 350 阅读 · 0 评论 -
数组中的逆序对
一、题目在数组中,如果前一个数字大于后一个数字,则两个数字组成一个逆序对。输入一个数组,求逆序对总数。二、分析(1)暴力求解:顺序扫描这个数组,每扫描到一个数字,如果后面是的数字比当前的数字小,则构成一个逆序对。(2)归并排序(先把数组分成子数组,统计出子数组中逆序对的个数,再统计出相邻子数组中逆序对的个数)int inversepair(int *nums,int leng...原创 2019-05-03 14:15:01 · 245 阅读 · 0 评论 -
员工的重要性
一、题目描述给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度和直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员...原创 2019-04-19 10:49:58 · 855 阅读 · 0 评论 -
二叉树中和为某一值的路径
一、题目输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始,一直到叶节点所经过的节点形成一条路径。二、分析前序遍历,当访问到某一节点后,把节点添加到路径上,并累加该节点的值。如果该节点为叶节点,并且路径中节点值的和刚好等于输入的整数,则打印路径;若当前节点不是叶节点,则继续访问它的子节点。当前节点访问结束后,递归函数将自动回到它的父节点,因此,我们...原创 2019-05-03 15:43:13 · 239 阅读 · 0 评论 -
字典序
一.字典序基础字典序(dictionary order),又称字母序(alphabetical order),原意是表示英文单词在字典中的先后顺序,在计算机领域中扩展成两个任意字符串的大小关系。英文中的字母表(Alphabet)按照如下的顺序排列:ABCDEFG HIJKLMN OPQRST UVWXYZabcdefg hijklmn opqrst uvwxyz在字典中,...原创 2019-01-25 10:45:56 · 89378 阅读 · 2 评论 -
工厂选地址问题
一、描述:12个工厂分布在一条东西向高速公路的两侧,工厂距离公路最西端的距离分别是0、4、5、10、12、18、27、30、31、38、39、47.在这12个工厂中选取3个原料供应厂,使得剩余工厂到最近的原料供应厂距离之和最短,问应该选哪三个厂 ?二、分析(1)工厂距离是从小到大排序的。(2)从N个工厂中选择1个原料厂,选择位于中位数位置的工厂,距离之和最短。(3)设A[i][j]表...原创 2019-05-28 09:22:21 · 16873 阅读 · 0 评论 -
n个数求前m个数的大小
一、描述n个数求前m个数的大小二、分析堆排序就是先求出最大的数,然后求出次大的数,然后求出第三大的数,依次类推,而这个题只要求求出前m个大的数,所以用堆排序应该是效率比较高的。三、代码void heapfy(int a[],int i,int heapsize){ int largest=i; int left=2*i+1; int right...原创 2019-05-28 10:21:50 · 545 阅读 · 0 评论 -
多路归并
一、归并排序归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。二、多路归并多路归并排序算法在常见数据结构书中都有涉及。从2路到多路(k路),增大k可以减少外存信息读...原创 2019-05-28 18:13:15 · 2249 阅读 · 0 评论 -
旋转数组的查找
一、题目给定一个有序数组,如{1,2,3,4,5,6,7,8,9},我们将对这个数组进行选择,位置旋转未知。下面给出一个可能的旋转结果。如{4,5,6,7,8,9,1,2,3},我们可以理解为它从元素4位置开始旋转。之后给定一个指定的数字n,让我们从{4,5,6,7,8,9,1,2,3}这个数组中找出它的位置,要求时间复杂度尽可能的低。二、解析二分查找的变形.思路: 1、选择中间点...原创 2019-07-17 20:43:38 · 195 阅读 · 0 评论 -
约瑟夫环
一、问题描述有 M 个人,其编号分别为 1-M。这 M 个人按顺序排成一个圈(如图)。现在给定一个数 N,从第一个人开始依次报数,数到 N 的人出列,然后又从下一个人开始又从 1 开始依次报数,数到 N 的人又出列...如此循环,直到最后一个人出列为止。【输入格式】输入只有一行,包括 2 个整数 M,N。之间用一个空格分开(0 < n <= m <= 100...原创 2019-07-21 19:58:49 · 604 阅读 · 0 评论 -
洗牌算法
一、什么是洗牌算法Fisher–Yates shuffle洗牌算法简单来说Fisher–Yates shuffle算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。 这个算法生成的随机排列是等概率的。二、实例要求:给定一个长度为n的有序数组,要求将其完全打乱,每个元素在任何位置出现的概率均为1/n。随机洗牌算法有好几个,这里讲其中的一个,Fisher-Yat...原创 2019-04-09 13:56:32 · 379 阅读 · 0 评论 -
按奇偶数组排序
给定一个非负整数数组A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当A[i]为奇数时,i也是奇数;当A[i]为偶数时,i也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。class Solution {...原创 2019-04-12 10:58:55 · 295 阅读 · 0 评论 -
逻辑回归模型的总结
一.正式介绍逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。这里面其实包含了5个点1:逻辑回归的假设2:逻辑回归的损失函数,3:逻辑回归的求解方法,4:逻辑回归的目的,5:逻辑回归如何分类。逻辑回归的基本假设 任何的模型都是有自己的假设,在这个假设下模型才是适用的。逻辑回归的第一个基本假设是假设数据服从...原创 2019-03-05 11:41:26 · 2300 阅读 · 0 评论 -
K近邻算法
一、kNN算法的工作原理官方解释:存在一个样本数据集,也称作训练样本集,并且样本中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系,输入没有标签的新数据后,将新数据的每个特征与样本集中的数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据(最近邻)的分类标签。一般来说,我们只选择样本集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数,最后,...原创 2019-02-23 15:11:36 · 368 阅读 · 0 评论 -
机器学习概念
一、什么是机器学习机器学习是一种数据分析技术,教计算机执行人和动物与生俱来的活动:从经验中学习。机器学习算法使用计算方法直接从数据中“学习”信息,而不依赖于预定方程模型。当可用于学习的样本数量增加时,这些算法可自适应提高性能。二、机器学习应用场景随着大数据应用增加,机器学习已经成为解决以下领域问题的一项关键技术:计算金融学,用于信用评估和算法交易图像处理和计算机视觉,用于人脸识...原创 2019-02-23 14:55:15 · 806 阅读 · 0 评论 -
机器学习课程
目录一 欢迎来到机器学习 监督学习 无监督学习 一元线性回归 参数学习-梯度下降算法 线性代数复习 二 编程环境设置-Octave:MATLAB 多元线性回归分析 参数的计算分析 Octave/Matlab 使用说明 三 分类和表达式 分类 假设函数表达式 决策边界 Logistic回归模型 逻辑回归的代价函数 ...转载 2019-02-17 17:23:48 · 159 阅读 · 0 评论 -
机器学习术语
机器学习基本概念机器学习就是通过大量的现有数据,对模型进行训练,训练后的模型在遇到新的数据时,就可以对结果进行预测,通过预测的结果就可以知道模型的准确性,然后我们再不断调整模型参数提高模型准确率,当模型足够准确时,就可以用来根据数据预测结果。这就是机器学习这门学问的基本研究方法。在正式学习机器学习前,首先需要了解机器学习中的常见术语,下面我们以表格中的数据作为机器学习分析的数据,对机器学习...原创 2019-02-15 14:25:05 · 901 阅读 · 0 评论 -
机器学习-分类与回归
一、工具篇1.Jupyter Notebook 是一款开放源代码的 Web 应用程序,可让我们创建并共享代码和文档。二、概念篇什么是分类问题,什么是回归问题?以及两者的区别什么是二叉树?二叉树很容易理解,在这里我们一般用满二叉树:就是非叶子节点都有2个分支的树形数据结构什么是决策树?决策树最初是用来做决策用的,就好像下面的见不见相亲对象的决策过程一样;如果把...原创 2019-02-15 14:11:11 · 553 阅读 · 0 评论 -
桶排序
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到O(n log n)下限的影响。桶排序以下列程序进行:1.设置一个定...原创 2019-03-17 18:57:09 · 114 阅读 · 0 评论 -
排序算法
常见算法的稳定性(要记住)堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。稳定性的意义1、如果只是简单的进行数字的排序,那么稳定性将毫无意义。2、如果排序的内容仅仅是一个复杂对象的某一个数字属性,那么稳定性依旧将毫无意义(所谓的交换操作的开销已经算在算法的开销内了,如果嫌弃这种开销,不如换算法好了?)...原创 2019-03-17 19:33:52 · 229 阅读 · 0 评论 -
排序算法之稳定性分析
首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排...原创 2019-03-17 20:10:49 · 229 阅读 · 0 评论 -
BFS
一、什么是BFS广度优先算法(Breadth-First-Search),简称BFS,是一种图形搜索演算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点,如果发现目标,则演算终止。二、算法分析1、BFS是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。2、时间复杂度:邻接表的时候是O(|...原创 2019-03-17 20:16:02 · 12417 阅读 · 0 评论 -
最长不含重复字符串的子字符串
一、题目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含′a′′a′~′z′′z′的字符。例如,在字符串"arabcacfr""arabcacfr"中,最长的不含重复字符的子字符串是"rabc""rabc"或者"acfr""acfr",长度为4.二、解题思路1.采用动态规划求解定义函数f(i)f(i)表示第ii个字符为结尾的不包含重...原创 2019-03-26 12:05:13 · 321 阅读 · 0 评论 -
排序
0、排序算法说明0.1排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; ...转载 2019-03-24 17:02:58 · 220 阅读 · 0 评论 -
斐波那契相关
一、引入有趣问题:1,有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法?答:这就是一个斐波那契数列:登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种方法……所以,1,2,3,5,8,13……登上十级,有89种。2,数列中相邻两项的前项比后项的极限是多少,就是问,当n趋于无穷大时,F(n)/...原创 2019-04-10 10:45:30 · 378 阅读 · 0 评论 -
leetcode-堆
659.输入一个按升序排序的整数数组(可能包含重复数字),你需要将它们分割成几个子序列,其中每个子序列至少包含三个连续整数。返回你是否能做出这样的分割?示例 1:输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 : 1, 2, 33, 4, 5解题思路:贪婪解法:第一个map用来建立数字和其出现次数之间的映射fre,第二个用来建立可...原创 2019-04-08 18:00:39 · 331 阅读 · 0 评论 -
GDBT与XGBOOST
一、GDBT1、GBDT是一个系列算法,具有很好的性能,可以用于回归、分类、排序的机器学习任务。2、决策树GBDT中的弱学习器采用的是决策树(1)决策树的学习通常包含3个步骤:特征选择、决策树的生成和决策树的修剪。(2)决策树由结点和有向边组成,结点有两种类型:内部结点和叶子结点,内部结点表示一个特征或属性,叶子结点表示一个类。(3)分类时,根据内部结点的特征对样本进行测试...原创 2019-03-20 14:32:06 · 621 阅读 · 0 评论