数据结构和算法
Deft_MKJing宓珂璟
并非所有流浪者都迷失了自我
展开
-
算法学习记录一(C++)--->二维数组中的查找
描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。array: 待查找的二维数组 target:查找的数字返回true找到,返回false没找到面试题二维数组 —–> [[a,a,a,a,a],[b,b,b,b,b],[c,c,c,c,c,c],[d,d,d,d,d]原创 2017-07-31 11:05:26 · 747 阅读 · 0 评论 -
Python实现理解树,树的遍历,二分查找
目录二分查找树的种类二叉树的性质(特性)二叉树的节点表示以及树的创建二叉树的遍历广度遍历深度遍历(先序 中序 后序)如何根据遍历顺序确定一棵树?二分查找搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找二分查找又称折半查找,优点是比较次数少,查...原创 2016-06-21 14:06:40 · 1381 阅读 · 0 评论 -
Python实现几大排序算法的原理和实现
目录冒泡排序选择排序插入排序快速排序希尔排序归并排序堆排序 这里用Python实现了简单的7种排序,还有三种可以参考下面文章https://www.cnblogs.com/onepixel/p/7674659.html https://www.jianshu.com/p/7d037c332a9dhttps://blog.csdn.net/s...原创 2016-06-21 14:12:42 · 992 阅读 · 0 评论 -
MD5理解和基础应用场景
MD5是什么message-digest algorithm 5(信息-摘要算法)。经常说的“MD5加密”,就是它→信息-摘要算法。在下载一下东西时,经常在一些压缩包属性里,看到md5值。而且这个下载页面,很可能会在某一个地方,写了一句,此文件的MD5值为XXXXXXXXX。这有什么作用呢?白话白话:md5,其实就是一中算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为转载 2017-10-19 18:02:18 · 3621 阅读 · 0 评论 -
算法学习记录十四(C++)--->二叉树的镜像
描述操作给定的二叉树,将其变换为源二叉树的镜像。 分析我们只需要遍历二叉树,然后每次访问(输出)一个节点的时候。交换其左右孩子即可 有递归和非递归两个版本 其本质是相同的,就是把前序中序,后序遍历中的打印节点的过程,编程交换左右子树的过程,其中需要注意一点,就是交换后左右子树进行了交换,再往下走的时候,往左走往右走的过程需改变,原来的向右走,现在应该是向左走递归版本/*struct Tree原创 2017-09-29 14:08:03 · 449 阅读 · 0 评论 -
算法学习记录十三(C++)--->10年微软面试题树的子结构
描述输入两棵二叉树A和B,判断树B是不是A的子结构。分析例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一样的,因此B就是A的子结构。 第一步:找到相同根节点 第二步:找到相同根节点后匹配左右子树是否值都匹配代码 (复杂flag版本但是思路很清晰)/*struct TreeNode { int val; struct TreeNode *left; stru原创 2017-08-31 16:50:27 · 371 阅读 · 0 评论 -
算法学习记录十二(C++)--->链表题目集合
描述输入一个链表,输出该链表中倒数第k个结点。分析最普遍的方法是,先统计单链表中结点的个数,然后再找到第(n-k)个结点。注意链表为空,k为0,k为1,k大于链表中节点个数时的情况。时间复杂度为O(n)这里主要讲一下另一个思路,这种思路在其他题目中也会有应用。主要思路就是使用两个指针,先让前面的指针走到正向第k个结点,这样前后两个指针的距离差是k-1,之后前后两个指针一起向前走,前面的指针走到最后原创 2017-08-25 16:58:48 · 812 阅读 · 0 评论 -
算法学习记录十一(C++)--->调整数组顺序使奇数前偶数后
描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析方法1:冒泡排序调换(只是条件变成了奇数和偶数互换) 方法2:临时数组存储(开启临时数组存储偶数,然后原数组删除偶数,最后进行push_back) 方法3:指针调换(该方法不能保证数组的奇偶的相对位置)方法1clas原创 2017-08-24 11:16:31 · 781 阅读 · 0 评论 -
算法学习记录十(C++)--->数值的整数次方
描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。分析1.普通方法,几次方就是乘以几次 2.位运算解法普通解法class Solution {public: double Power(double base, int exponent) { double ret = 1; if(expon原创 2017-08-11 16:43:51 · 1165 阅读 · 0 评论 -
算法学习记录九(C++)--->二进制中1的个数
描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析这种位运算的题目面试中很容易遇到 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三原创 2017-08-11 14:39:57 · 397 阅读 · 0 评论 -
算法学习记录八(C++)--->一句代码搞定变态跳台阶
基本跳台阶问题一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解法一(递归)对于本题,前提只有 一次 1阶或者2阶的跳法。a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a\b假设可以得出总跳法为: f(n) = f(原创 2017-08-11 10:56:26 · 648 阅读 · 0 评论 -
算法学习记录六(C++)--->获取斐波那契数列第n项
描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39分析这东西第一眼想到的就是递归,但是递归就会有问题,请看; f(n) = f(n-1) + f(n-2) 随便弄个简单的数字,其实你拆开来就会这样 Fibonacci(4) = Fibonacci(3) + Fibonacci(2); = Fibonac原创 2017-08-03 16:55:44 · 5355 阅读 · 0 评论 -
算法学习记录五(C++)--->两个栈实现队列
描述*用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 *栈是先进后出,FILO *队列是先进先出,FIFO思路入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。class Solution{public: // 栈1负责入栈 void push(i原创 2017-08-03 15:56:07 · 340 阅读 · 0 评论 -
算法学习记录七(C++)--->二分法找有序旋转数组最小值
描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。分析 1.最笨的方法,你可以直接遍历获取到最小的,显然面试的时候你这样写就GG了 2.和第一个一样,直接调用So原创 2017-08-10 16:33:55 · 555 阅读 · 0 评论 -
算法学习记录四(C++)--->通过前序和中序序列重建二叉树
描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路前序 DLR —> 根左右 第一个元素就是当前根节点中序 LDR —> 左根右 根元素分割了左子树和右子树 1.我们首先从前序中找到第一个元素创原创 2017-08-03 14:32:35 · 578 阅读 · 0 评论 -
算法学习记录三(C++)--->从尾到头打印链表每个节点的值
描述输入一个链表,从尾到头打印链表每个节点的值。思路对于这种颠倒顺序的问题,我们应该就会想到栈,后进先出。所以,这一题要么自己使用栈,要么让系统使用栈,也就是递归。注意链表为空的情况。时间复杂度为O(n示例一 展示每个节点的逆序打印 (栈–>C)// 从尾到头打印链表,使用栈 void RPrintList(ListNode * pHead) { std::stack<Lis原创 2017-07-31 15:30:10 · 1146 阅读 · 0 评论 -
算法学习记录二(C++)--->字符串空格替换
描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路问题1:在原来的字符串上进行替换 问题2:从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下 结论:在原来的字符串上进行替换,而且从后往前,先计算出需要多少空间,然后从后往前移动,每个字符串移动一次,这样效率更高一点C原创 2017-07-31 14:07:43 · 425 阅读 · 0 评论 -
Python3.6实现常用数据结构和算法(链表和二叉树经典问题,八大排序和三大查找)
前言Python大法好,除了工作用的OC外,其他时间Python还是很好用的,比如刷题,写脚本,美滋滋。。。数据结构只是静态的描述了数据元素之间的关系。高效的程序需要在数据结构的基础上设计和选择算法。程序 = 数据结构 + 算法总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体抽象数据类型(ADT)的含义是指一个数学模型以及定义在此数学模型上的一组操作。...原创 2018-09-23 11:54:32 · 1472 阅读 · 0 评论