数据结构和算法
xiaoxin_ysj
这个作者很懒,什么都没留下…
展开
-
图 - DFS深度优先搜索和BFS广度优先搜索
图的概念 图是一种非线性表数据结构;图中的元素叫顶点(vertex),图中一个顶点可以与任意其他顶点建立连接关系,我们把这种建立的关系叫做边(edge),和顶点相连的边的条数叫度(degree);在有向图中又分为入度和出度,入度表示多少条边指向这个顶点,出度表示有多少条边是以这个顶点为起点指向其他顶点。图的存储方法1. 邻接矩阵(adjacency matrix) 邻接矩阵底层依...原创 2019-10-27 15:23:26 · 251 阅读 · 0 评论 -
常见的链表操作
一、单链表 单链表的操作主要包括:链表数据插入、删除节点,以及一些衍生的单链表的翻转、检测链表中的环、两个有序链表的合并、删除倒数第n个节点和求链表的中间节点。 首先是单链表的基本操作:链表的插入,在这里使用的是头插法,并且添加了哨兵节点,也就是头结点,这样可以不用考虑头结点的边界问题,具体C++代码如下: 1、链表的插入struct SingleLi...原创 2019-03-14 14:56:15 · 424 阅读 · 0 评论 -
常见的哈希表操作 —— TwoSum问题
TwoSum问题:①、twosum输入不存在相同数据,输出唯一问题描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。解决方案:1)、使用暴力解决方法,使用嵌套遍历,找到对应元素下标2)、使用散列表,具体描述如下: ...原创 2019-03-26 20:29:54 · 1108 阅读 · 0 评论 -
二分查找的几种变体
1、查找第一个值等于给定值的元素假设数据是按照从小到大进行排序的,并且存在重复数据,从有序的数组中,查找第一个值等于给定的数据。public static int bsearch1(int[] arr, int value){ if(arr.length == 0) return -1; int low = 0; int high = a...原创 2019-04-08 10:31:47 · 409 阅读 · 0 评论 -
二分查找并实现求数的平方根
1、二分查找对一个有序的数据集合,查找的思想类似分治思想,每次通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0。/** * 注意在实现的时候: * 1、循环终止条件: low <= high * 2、mid的取值,假如low和high比较大的话,取 (low + high) / 2, * ...原创 2019-04-02 17:24:02 · 4321 阅读 · 2 评论 -
leetcode 第三题 无重复字符的最长子串
描述:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度1、解决方法:建立一个HashMap,建立每个字符和其最后出现位置之间的映射;然后再定义两个变量res和left ,其中res用来记录最长无重复子串的长度,left指向该无重复子串左边起始位置的前一个,初始化为-1;遍历整个字符串,如果该字符已经在HashMap中存在,并且如果映射值大于left的话,那么更新lef...原创 2019-03-29 12:58:28 · 171 阅读 · 0 评论 -
动态规划-走台阶和国王与金矿问题
(1)、走台阶有一座N级的台阶,从下往上走,每次走一个或两个台阶,那么走上N阶总共需有多少种方法?考虑:假设台阶一共10级,那么只差最后一步就走到10级台阶,这时有几种情况?有两种:第一种,从第9级到第10级;第二种从第8级到第10级。那么现在想想,不管之前0级-9级或者0级-8级走台阶的过程,最后一步肯定是从第9级或者第8级台阶走,假设从0级-8级台阶的走法有X种,0级-9级台阶的走...原创 2019-04-21 17:16:56 · 747 阅读 · 0 评论 -
线性排序 -- 计数排序
1、定义计数排序是桶排序的一种特殊情况,当要排序的n个数据,所处的范围并不大的时候,比如最大值是K,我们就可以把数据划分为k个桶,每个桶内的数值都是相同的,省去了桶内排序的时间。2、举例说明高考查分系统:比如50万考生,满分900,最低0分,最高900分,那么可以对应901个桶,对应分数从0~900,根据考生的成绩划分到这901个桶里,桶内都是分数相同的考生,不需要排序。因此只需要依次...原创 2019-05-11 00:37:12 · 171 阅读 · 0 评论 -
数据结构之跳表
(1)、定义跳表实际上是一种增加了前向指针的链表,是一种随机化的数据结构,实质上是可以进行二分查找的有序链表;跳表在原来的有序链表上加上了多级索引,通过索引来快速查找;可以支持快速的删除、插入和查找操作。(2)、跳表的理解对于一个单链表来讲,即使链表中存储的数据是有序的,如果我们想要在其中查找某个数据,也只能从头开到尾的遍历,查询效率低,时间复杂度是O(n)。如下图所示如何提交...原创 2019-05-27 00:23:20 · 6762 阅读 · 3 评论