数据结构与算法
Jialuhu
这个作者很懒,什么都没留下…
展开
-
二叉树的递归与非递归遍历
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#define Size 100#define False 0#define Ture 1/*树的存储结构*/typedef struct Tree { char data; struct Tree *Lift; struct Tree *Right;}Tr原创 2017-11-19 14:08:22 · 292 阅读 · 0 评论 -
求字符最长且不重复的子串长度(暴力以及滑动窗口解决)
题目:给定一个字符串,找出不含有重复字符的最长子串的长度。示例:给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。暴力解决方法:首先枚举出所有的子串原创 2018-06-15 16:05:34 · 4620 阅读 · 1 评论 -
最长回文子串求解
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例:babad输出:bab(注意aba也是有效答案)思路:1、可以枚举出所有的子串,然后每次都判断该子串是否是回文,若是回文便更新最大长度,并且记录子串的开始位置和结束位置。2、可以从第一个字符为中心向两边检查,若以k为中心 ,那么i往K的左边检测,j往右边检测。若s[i]==s[j]那么说明从i-j的子串为回...原创 2018-06-22 19:44:46 · 278 阅读 · 0 评论 -
利用分治法求两个有序数组的中位数
也是看了一篇很好的博客,思路很清晰,只是有些地方感觉博主没有详细解释,后来理解了,做了一个小总结。原博客链接:点击打开链接题目还是昨天的那道题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。示例 1:nums1[1,3]nums2[2]中位数:2.0示例 2:nums1[1,2]nums2[...原创 2018-06-20 22:47:58 · 12604 阅读 · 3 评论 -
栈的简单实现
#ifndef _STACK_H#define _STACK_Hclass stack{private: enum {MAX = 10}; int num[MAX]; int SIZE;public: stack(); bool empty() const; bool isfull() const; bool push(const int &n);...原创 2018-05-15 19:36:50 · 227 阅读 · 0 评论 -
桶排序、冒泡排序、选择排序、快速排序回顾
桶排序第一次了解桶排序的时候,是在C语言课本的一个题目。题目大概意思是要将三万个学生的成绩进行排名,分数从0分到100分。桶排序的时间复杂度时O(M+N)。所以就可以申请一个大小为100的为int类型的数组,然后将数组初始化为0,再将数组的下标看作为分数,把数组元素中存储的数值对应着获得该分数的人数,这样分数就自己在数组中有了排名,最后再用循环依次输出,只是输出的时候要看该分数有多少人获得,就重复原创 2018-05-08 17:00:42 · 459 阅读 · 0 评论 -
线性表的一些简单操作(C++实现)
#include<iostream>using namespace std;template<class T>class linearList{public: virtual ~linearList(){}; virtual bool empty() const = 0; //判断线性表是否为空 virtual int size() cons...原创 2018-05-21 17:40:21 · 1649 阅读 · 0 评论 -
堆排序的思路以及代码的实现
关于堆的一些知识点回顾堆是一个完全二叉树完全二叉树即是:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。堆满足两个性质: 堆的每一个父节点数值都大于(或小于)其子节点,堆的每个左子树和右子树也是一个堆。 堆分为最小堆和最大堆。最大堆就是每个父节点的数值要大于孩子节点,最小堆就是每个父节点的数值要原创 2018-05-09 23:52:56 · 16826 阅读 · 5 评论 -
通过DFS和BFS判断无向图是否连通
基础定义无向图:没有方向的图 连通图:任意两个顶点可以直接或者通过其他顶点走通,那么就是连通图,和完全图需要区别(完全图是需要任意两个顶点直接有路)遍历图的基本方法来判断是否连通DFS和BFS有的步骤都是从一个顶点开始,然后判断该顶点是否被访问,而且该顶点和其他顶点是否有关系,若有关系并且没有访问过,就往下访问,要是无向图是连通的,那么这个过程会依次下去遍历所有节点。所以通过这个特性,就可以设置一原创 2017-11-27 22:18:30 · 13953 阅读 · 2 评论 -
DFS和BFS学习总结
DFS深度优先遍历深度遍历就是在图中从一个顶点开始,按照一个规则不重复地走下去。就是不撞南墙不回头一样。假如从A顶点开始,按照一个规则去走(假如我们按照一直字典顺序走)那么就从A走到B再从B走到了C,走到C后再按照字典顺序的时候,发现A已经走过,那么此时就退回到C点,选择另一个D走下去。就和树的前序遍历是一样的。实现方式1、递归实现(通过邻接矩阵来实现)void DFS(MGrap G. int i原创 2017-12-04 11:56:54 · 574 阅读 · 0 评论 -
稀疏矩阵(快速定位转置)
三元表 三元表就是存储稀疏矩阵非零元素的行列位置及其元素值的一个表。对稀疏矩阵进行了压缩吧。快速定位转置 该算法是对要被转置矩阵的三元表只进行一次扫描,使得所有的非零元素一次性就被存放到装置的三元表里。所以要预先确定原来矩阵每一列的第一个非零元素的位置,那么接下来的元素在转置的时候根据上一个元素在三元表的位置,可以推出自己的位置,并且依次放入应有的位置。所以同一列中有多少个非零元素,那么转置之原创 2017-11-05 13:26:49 · 859 阅读 · 0 评论 -
求两个排序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。示例 1:nums1[1,3]nums2[2]中位数:2.0示例 2:nums1[1,2]nums2[2,3]中位数:(2+2)/2=2.0思路:因为是两个已经有序的数组,要求中位数,只需要将两个数组合并成一个有序数组,然后根据数组元素个数的奇偶性...原创 2018-06-19 15:44:30 · 1004 阅读 · 1 评论