
数据结构+算法
文章平均质量分 50
. . . . .
越努力越幸运!
展开
-
JavaScript链表实现
JavaScript中的链表结构:JavaScript中的链表实现:参考链接:https://www.bilibili.com/video/BV1nt4y167pm?from=search&seid=14836629269858710487原创 2021-07-27 08:13:48 · 155 阅读 · 0 评论 -
千分位实现
千分位1234567 -> 1,234,567循环实现:function sep(num) { let s = String(num); let res = ''; for(let i=s.length-1, j=0;i>=0;i--,j++) { if (j%3 === 0 && j!==0) { res+=',' } res += s[i]; } console.log(Number(res.split('').reverse().joi原创 2021-06-27 18:08:07 · 202 阅读 · 0 评论 -
外部排序
当我们要排序的文件太大以至于内存无法一次性装下的时候,这时候我们可以使用外部排序,将数据在外部存储器和内存之间来回交换,以达到排序的目的排序思想一天晚上,一尘正在呆呆地看着星星,师傅突然坐在了他的旁边。慧能:一尘啊,天上的星星那么多,不妨你给他们按大小排个序吧。一尘:哦,这个怎么排?慧能:具体到我们的编程,就是给你2G的数据在硬盘上,但是你只有256M的内存可以使用,怎么排这2G的数...转载 2019-07-01 14:29:33 · 3155 阅读 · 0 评论 -
二叉树的推导
目录推导遍历结果1、已知前序遍历和中序遍历2、已知中序遍历和后序遍历3、已知前序遍历和后序遍历,无法确定一颗唯一的二叉树参考文献推导遍历结果1、已知前序遍历和中序遍历例:前序遍历为ABCDEF,中序遍历为CBAEDF,求二叉树的后序遍历?解:已知前序遍历先打印根节点,再打印左右节点=>根节点为A;已知中序遍历先打印左节点,再打印根节点,在打印右节点=>二叉树的左...原创 2019-06-28 16:35:58 · 1603 阅读 · 0 评论 -
0、1背包问题
例题:一个商店里有5件商品,重量分别为:2、3、4、5、9,对应的价值分别为:3、4、5、8、10。现在,有一个小偷拿着一个20kg的包去这个商店里偷东西,问:他如何偷,才能使他不虚此行,偷的价值总和最大?(这年头,小偷不会动态规划都不行了,哈哈哈)其中k代表前k个商品,C代表剩余多少空间c++代码实现:#include<iostream>#define N 6#d...原创 2019-07-04 12:47:51 · 344 阅读 · 1 评论 -
图的广度优先遍历(BFS)和深度优先遍历(DFS)
一. BFS(广度优先遍历)1. 理解概念:BFS即广度优先遍历,BFS总是先访问完同一层的结点,然后才继续访问下一层结点,它最有用的性质是可以遍历一次就生成起始结点到所遍历结点的最短路径,这一点在求无权图的最短路径时非常有用。遍历:选择任意一个结点作为开始的结点,假如从A点出发:可能的结果有:A B C D E FA C B D E FA C B E D FA B C E ...原创 2019-07-25 19:56:29 · 1160 阅读 · 0 评论 -
迪杰斯特拉算法
迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。该算法的目标:带权图求最短路径对于带权图需要借助优先队列来实现。python提供了优先队列这种结构,参考如下:import heapq#P...原创 2019-07-25 21:25:21 · 340 阅读 · 0 评论 -
排序总结
排序总结:排序分类:一. 冒泡排序(Bubble Sort):1.1 算法描述:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。1.2 演示:1.3 代码实现:void BubbleSort( i...原创 2019-08-08 10:28:39 · 445 阅读 · 0 评论 -
链表:在一次遍历后找到单链表的中间元素
方法: 快慢指针的方法。快指针每次走2个结点,慢指针每次走1个结点,当快指针走完链表,慢指针刚好走到中间。注意:当结点数是奇数时,慢指针走到中间结点,当结点数是偶数时,此时中间结点有2个,此时慢指针指向靠前那个结点。例如:1 3 5 7 9 快指针第一次走到 5 ,第二次走到 9 然后链表走完,慢指针走2步 刚好走到中间结点5。再例如:1 3 5 7 快指针第一次走到 5 ,第二次越...原创 2019-10-08 22:22:03 · 1592 阅读 · 0 评论 -
堆排序
基础知识: 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其...原创 2019-06-20 16:08:53 · 225 阅读 · 0 评论 -
二叉树的遍历(递归&&非递归)
// BinaryTree.cpp : 定义控制台应用程序的入口点#include "stdafx.h"#include<iostream>#include<stack>#include<queue>using namespace std; //二叉树结点typedef struct BiTNode{ //数据 char data; //左...转载 2019-05-26 22:40:36 · 156 阅读 · 0 评论 -
单链表反转
伪代码实现:struct LinkNode *pPrve = NULL;struct LinkNode *pCurrent = pHeader->next;struct LinkNode *pPrve = NULL;while (pCurrent != NULL) { pNext = pCurrent->next; pCurrent->next = pPrve;...原创 2019-05-26 20:43:16 · 293 阅读 · 0 评论 -
折半查找算法
引入:在一个数字猜测游戏中,范围是(0-999),默认指定一个数,假设为640。如果让你从0-999猜数字,猜大猜小都会提示你。那么问题是你怎样才能最快最准的猜出来呢? 折半算法:因为是0-999,我们可以猜测是500,如果我们猜小了,那么肯定在500-999了,这样我们一下子就排除了一半。接下来我们猜测是750,此时会提示你猜大了,那么我们又知道了正确的数字在500-750之间,又排除了原创 2017-02-11 21:07:43 · 1948 阅读 · 0 评论 -
递推算法
算法思路: 递推算法使用“步步为营”的方法,不断利用已有的信息推导新的东西。主要分为两种:1. 顺推法:是指从已知条件出发,逐步推算出要解决问题的方法。例如:斐波那契数列就可以通过顺推法不断的推算出新的数据。2. 逆推法:是从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。原创 2017-02-12 00:01:32 · 349 阅读 · 0 评论 -
枚举法(穷举法)
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件: 1. 可预先确定候选答案的数量 2. 候选答案的范围在求解之前必须有一个确定的集合。实例:填数字游戏 由题意可以知道,“算”字取值范围为1-9,其余的取值范围为0-9.原创 2017-02-12 00:15:58 · 2805 阅读 · 0 评论 -
贪婪算法
算法思路: 从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快地求得更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出近似的解。 由贪婪算法的特点和思路可以看出,该算法存在以下问题: 1. 不能保证最后的解是最优的; 2. 不能用来求最大或最小解的问题; 3. 只能求满足某些约束条件的可行解的范围。原创 2017-02-12 17:40:53 · 466 阅读 · 0 评论 -
1+2+3+....+n问题
这是一道小学生题,很容易让人直接用以前的思维来算。即:(1+n)=(2+n-1)=(3+n-2)=…..然后再看有多少个这样的相等的数。 但是当我们放到程序计算上,通过等差数列的方式更为高效,即:n(n+1)/2原创 2017-02-12 18:51:46 · 412 阅读 · 0 评论 -
分治算法
算法思路: 使用分治算法设计程序时,一般可按以下步骤进行: 1. 分解:将要求解的问题划分成若干规模较小的同类问题; 2. 求解:当子问题划分得足够小时,用较简单的办法解决; 3. 合并:按求解问题的要求,将子问题的解逐层合并,即可构成最终的解。下面我们以快速排序为例聊一聊。 简述:快速排序又称为划分交换排序,快速排序是对冒泡排序的一种改进,在冒泡排序中,进行记录关键字的原创 2017-02-12 17:23:53 · 573 阅读 · 0 评论 -
快速排序--c++/javascript/python实现
快速排序的基本实现:快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想:1、从数列中取出一个数作为基准数(枢轴,pivot)。2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素。快排最重要的一步就是划分了。划分的过程用通俗的语言讲就是“挖坑”和...原创 2019-02-12 17:55:53 · 224 阅读 · 0 评论 -
硬币组合问题
问题:假设有5元,10元,25元,1元的纸币,任意组合,问若组合成1000元能有多少种组法?思路一:暴力破解法问题转化:1000=5*x+10*y+25*z+1*m 转化后的问题是x,y,z,m取多少值时满足条件。 x的取值范围0到1000/5 y的取值范围0到1000/10 z的取值范围0到1000/25 m的取值范围0到1000/1 代码如下:package practice;pub原创 2017-02-17 21:57:09 · 965 阅读 · 0 评论