随笔分类 -  [802]数据结构与算法

理论知识
摘要:题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 对应每个测试案例,输出两个数,小的先输出。 思路 定义两个指针,分别从前面和后面进行遍历。间隔越远乘积越小,间隔越近乘积越大,所以最先出现的两个数乘积最小。 代 阅读全文
posted @ 2019-01-10 11:54 DarrenChan陈驰 阅读(167) 评论(1) 推荐(0)
摘要:题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路 层次遍历,在此基础上加上奇数偶数行判断。 代码 阅读全文
posted @ 2019-01-10 11:22 DarrenChan陈驰 阅读(318) 评论(0) 推荐(0)
摘要:题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路 定义快慢两个指针,相遇后(环中相汇点)将快指针指向pHead 然后一起走,每次往后挪一位,相遇的节点即为所求。详细分析:相遇即p1==p2时,p2所经过节点数为2x,p1所经过节点数为x,设环中有n个节点,p 阅读全文
posted @ 2019-01-10 10:32 DarrenChan陈驰 阅读(250) 评论(0) 推荐(0)
摘要:题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。 思路 新建一个头节点,向后进行重复查找判断。 代码 阅读全文
posted @ 2019-01-09 22:56 DarrenChan陈驰 阅读(732) 评论(0) 推荐(0)
摘要:题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+ 阅读全文
posted @ 2019-01-09 22:41 DarrenChan陈驰 阅读(426) 评论(0) 推荐(0)
摘要:题目描述 给出若干个线段的起始点和终止点,求这些线段某个位置重合的最大个数。 思路 可以先按照右端点升序,对每条线段,若它右边的线段开始时间在该条线段之前,表示和该条线段重合。算出这条线段的最大重合数量,再找下一条。 代码 阅读全文
posted @ 2018-09-21 19:39 DarrenChan陈驰 阅读(1248) 评论(0) 推荐(0)
摘要:给定一个数组,可以从数组中取出下标不连续的任意个数,求可以取出的数的和的最大值,例如:给出数组A[]={1,2,2,5,3,4,3}可以取出的最大和为2+5+4=11。现再给定数组{3,9,7,5,1,3,1,2,7},能取出的数的和的最大值是24。 方法一:动态规划 假设原数组为arr,辅助数组为 阅读全文
posted @ 2018-09-16 21:56 DarrenChan陈驰 阅读(1669) 评论(0) 推荐(2)
摘要:求一个字符串的全排列所有情况。 输入: 2 输出: 0120211021202012106 代码实现: 阅读全文
posted @ 2018-09-13 16:42 DarrenChan陈驰 阅读(1318) 评论(0) 推荐(0)
摘要:简易地图 如图所示简易地图, 其中绿色方块的是起点 (用 A 表示), 中间蓝色的是障碍物, 红色的方块 (用 B 表示) 是目的地. 为了可以用一个二维数组来表示地图, 我们将地图划分成一个个的小方块. 二维数组在游戏中的应用是很多的, 比如贪吃蛇和俄罗斯方块基本原理就是移动方块而已. 而大型游戏 阅读全文
posted @ 2018-08-31 01:01 DarrenChan陈驰 阅读(818) 评论(0) 推荐(1)
摘要:本文主要讲解最大流问题的Ford-Fulkerson解法。可以说这是一种方法,而不是算法,因为它包含具有不同运行时间的几种实现。该方法依赖于三种重要思想:残留网络,增广路径和割。 在介绍着三种概念之前,我们先简单介绍下Ford-Fulkerson方法的基本思想。首先需要了解的是Ford-Fulker 阅读全文
posted @ 2018-08-31 00:57 DarrenChan陈驰 阅读(8639) 评论(0) 推荐(0)
摘要:最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。 普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树的算法。 基 阅读全文
posted @ 2018-08-31 00:46 DarrenChan陈驰 阅读(1038) 评论(0) 推荐(0)
摘要:基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点vs(即从顶点vs开始计算)。 此外,引进两个集合S和U。S的作用是记录已求出最短路径的顶点,而U则是记录还未求出最短路径的顶点(以及该顶点到起点vs的距离)。 初始时,S中只有起点vs;U中是除vs之外的顶点,并且U中顶点的路径是" 阅读全文
posted @ 2018-08-29 19:03 DarrenChan陈驰 阅读(8177) 评论(0) 推荐(0)
摘要:布隆过滤器 (Bloom Filter)是由Burton Howard Bloom于1970年提出,它是一种space efficient的概率型数据结构,用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的网址判重模块中等等经常被用到。哈希表也能用于判断元素是否在集 阅读全文
posted @ 2018-08-28 17:04 DarrenChan陈驰 阅读(836) 评论(0) 推荐(0)
摘要:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)" Bit-map空间压缩和快速排序去重 1. Bit-map的基本思想 32位机器上,对于一个整型数,比如int a=1 在内存中占32bit位,这是为了方便计算机的运算。但是 阅读全文
posted @ 2018-08-28 17:00 DarrenChan陈驰 阅读(1629) 评论(0) 推荐(0)
摘要:深度优先搜索 深度优先搜索,我们以无向图为例。 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通 阅读全文
posted @ 2018-08-28 14:02 DarrenChan陈驰 阅读(3346) 评论(0) 推荐(0)
摘要:必须做到以下两点:1.如果stackPush要往stackPop中压数据,那么必须一次性把stackPush中的数据全部压入。2.如果stackPop不为空,stackPush绝对不能向stackPop中压入数据。 阅读全文
posted @ 2018-08-26 09:52 DarrenChan陈驰 阅读(361) 评论(0) 推荐(0)
摘要:队列有两种实现方式:静态队列(数组)和动态队列(链表)。 这次我就使用数组来实现静态队列了。值得注意的是:往往实现静态队列,我们都是做成循环队列。 从上面的设计我们可以发现:rear并不指向最后一个有效的元素,在循环队列中这样设计是非常方便的!因为这样设计可以让我们分得清队头和队尾(不然循环队列不断 阅读全文
posted @ 2018-08-25 22:04 DarrenChan陈驰 阅读(863) 评论(0) 推荐(0)
摘要:栈有两种实现:静态栈(数组)和动态栈(链表)。这里采用链表。 阅读全文
posted @ 2018-08-25 22:01 DarrenChan陈驰 阅读(284) 评论(0) 推荐(0)
摘要:package com.darrenchan; public class MyList { /** * 插入(头插法) */ public static void headInsert(ListNode head, ListNode newhead){ ListNode old = head; head = newhead; ... 阅读全文
posted @ 2018-08-25 21:58 DarrenChan陈驰 阅读(200) 评论(0) 推荐(0)
摘要:在面试头条的时候,有一个很有意思的题目,利用两个线程交替打印一个字符串,这里主要就是对多线程中wait/notify的应用,特此记录。 对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有: 上面是官方文档的简介,下面我们根据官方文档总结一下: wait( 阅读全文
posted @ 2018-08-15 13:37 DarrenChan陈驰 阅读(1383) 评论(0) 推荐(0)