链表

底层存储 数组:一块连续的内存空间。 链表:用指针串起来的一组零散的内存空间。 链表分类:单链表、双向链表、循环链表 内存块是连接的节点。每个节点存储数据和指向下一个节点的指针。第一个节点叫做头结点,最后一个节点叫做尾节点。尾节点的next=null。 操作特点 1 插入、删除...

2019-05-16 23:00:40

阅读数 6

评论数 0

数组

如何实现随机访问 数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表 线性表的数据最多只有前和后两个方向。数组、栈、队列、链表都是线性表。 非线性表:树、图、堆。 连续的内存空间 a[i]_address=base_address+i∗data_t...

2019-05-16 07:34:21

阅读数 4

评论数 0

复杂度分析

事后统计法 测试结果依赖环境;2 与测试的数据集大小有关 大O复杂度表示法 所有代码的执行时间T(n)与每行代码的执行次数n成正比. $T(n)=O(f(n))$ 时间复杂度分析 1 只关注循环次数最多的一段代码。 2 加法法则:总复杂度等级两级最大的那代码的复杂度。 3 ...

2019-05-08 00:00:13

阅读数 4

评论数 0

开始《数据机构与算法之美》之旅

还在学算法,就像还在学英语一样悲催。想想自己为什么要学算法。学,是为了用。学了,能理解Java API提供的接口和数据结构的实现方式;学了,能在自己的工具箱里面多一种工具,在工作中用到的时候可以拿出来用。学,是为了能站在前人的肩膀上,看得更远。   那为什么学了很多遍呢?学了,没有温习造成的。学...

2019-05-01 11:08:41

阅读数 15

评论数 0

121 Best Time to Buy and Sell Stock

输入:一个数组prices,prices[i]表示第i天股票的价格。 输出:买卖股票的最大收益。 规则:只允许最多买一次,最多卖一次股票。如果觉得价格不合适,可以不买卖。 分析1:最先想到的是暴力搜索,每天都可以买或者卖,当然要符合规则。倒是AC了,但是时间太长。这个复杂度应该是2^n。 ...

2019-04-26 23:01:28

阅读数 19

评论数 0

301. Remove Invalid Parentheses

输入:一个字符串,包含(,),还有一些其他字符。 输出:左右括号完全匹配的字符串。并且要尽可能少的删除字符。 规则:有左括号,有对应的右括号与之匹配,成为有效。 分析1:用回溯法/暴力搜索,对于每一位的字符都考虑去掉或者留下两种可能,总会得到结果。这样的话,去掉的字符个数不同,需要记录下来,返回的...

2019-03-30 00:52:45

阅读数 12

评论数 0

815. Bus Routes

输入:int[][] routes routes[i]表示第i号公交车的运行线路。如果routes[i]={1,3,5}。说明公交车运行线路是1->3->5。    int S:表示起始站点    int T:表示目的站点 输出:从S到T最少需要几辆公交车。 规则:一开...

2019-03-28 16:28:35

阅读数 48

评论数 0

847. Shortest Path Visiting All Nodes(三)

DP  这道题目还可以用动态规划解决。在图论中解决最短路径问题有Dijkstra算法和bellman-ford算法。这道题目也需要用到DP。所以先学习一下这两个算法的思想和区别。  两个算法比较  Dijstra算法用来解决单源最短路径问题。具体内容看[文章] 算法 解决...

2019-03-17 22:21:33

阅读数 32

评论数 0

Bellman-Ford算法

贝尔曼-福特算法是计算从源点到任意一点的最短路径的长度。初始化数组dist[0]为0,dist[i]为无穷大。 以下操作循环执行至多n-1次,n为顶点数: 对于每一条边 edge(Start,End),如果dist[Start] +Weight(Start, End)&am...

2019-03-17 22:18:55

阅读数 18

评论数 0

847. Shortest Path Visiting All Nodes(二)

输入:有N个节点的无向图,每个节点被标注为0,1,…N-1。graph[i][j]表示从节点i到节点j有一条边。 输出:每个节点都访问一次,至少需要几步。 规则:可以重复访问一个节点。 分析:这道题目看了2个星期。其实这两周也是因为加班,没有再看新的题目。在地铁上没事,就把官方的解法方式拿出...

2019-03-16 18:29:20

阅读数 25

评论数 0

847. Shortest Path Visiting All Nodes(一)

输入:一个无向图,各个节点的标签是0、1、2…N-1。graph[i][j]表示从节点i到节点j有一条边。 输出:返回每个节点都访问一遍需要的最少步骤。 规则:各个节点可以重复访问。 分析:  如果可以知道从每个节点开始,经过所有节点的节点的话,那选择最小值即可。dp[i][00000...

2019-03-11 23:29:02

阅读数 19

评论数 0

130. Surrounded Regions

输入:二维数组,只包含X和O。 输出:修改过的数组 规则:任何不在边界的O,并且不与边界的O相邻的O能够被翻转为X 分析:先把边界上的O替换为字母M;把O替换为X;把M替换为O。替换的过程可以是DFS,或者BFS。DFS速度会更快一些。 public void solve(char[][] boa...

2019-02-28 15:35:00

阅读数 20

评论数 0

127. Word Ladder

输入:beginword,endword,wordList 输出:从beginWord,到endWord,需要几步。 规则:每次只变一个字母 分析:(原文)输入是 beginWord 和 endWord。我们可以让他们分别代表图的 开始节点 startNode 和结束节点endNode。我们...

2019-02-27 08:59:27

阅读数 12

评论数 0

310. Minimum Height Trees

输入:包含n个节点的无向图。n:表示从0到n-1,n个节点。edges:int数组,是从一个节点到另外一个节点。但是没有方向。 输出:以哪些节点为根节点,具有最小高度的树,返回这些根节点。 规则:一个树的高度是指从根节点到叶子节点的最远路径。最小高度树,是指所有树中高度最小的树。 分析:当只...

2019-02-26 07:59:32

阅读数 15

评论数 0

542. 01 Matrix

输入:元素值为0或者1的矩阵。 输出: 每个元素距离0的最近距离是多少。 规则:相邻单元格的距离是1,相邻是指上下左右4个方向。 分析:这类似于学习课程安排,可以从元素值为0的单元开始沿4个方向遍历。matrix[i][j]=0,那么距离result[i][j]=0,而且相邻元素的距离res...

2019-02-14 09:04:46

阅读数 31

评论数 0

207. Course Schedule

输入:课程数量n,每个课程的编号是0到n-1。课程学习的先后顺序用数组输入,例如[0,1]。要学习课程0,需要先学习课程1。 输出:如果可以学习完所有的课程,返回true,否则返回false。 分析:因为有些课程学习需要其他课程学习完才可以,这是拓扑排序的描述。我们可以根据数组对,建立一个有向图。...

2019-01-30 07:54:54

阅读数 20

评论数 0

【Breadth-first Search 】279. Perfect Squares

输入:一个非负整数n。 输出:这个非负整数可以写成几个完全平方数。返回这个数量。 规则:完全平方数可以表示为某个整数的平方。例如:1,4,9… 分析:13=4+9 也就是说13可以写成2个完全平方数的和。我可以先把13写成1+1+1+…+1,13个1相加。接着去拼2∗2=42*2=42∗2=4,可...

2019-01-21 23:09:32

阅读数 22

评论数 0

【Breadth-first Search 】103. Binary Tree Zigzag Level Order Traversal

输入:一颗二叉树 输出:这棵树的之字形层次遍历。 规则:之字形层次遍历是指第一层从左到右遍历,第二层从右到左遍历。 分析:这与102的区别就是有从左到右,从右到左遍历的交替过程。我们习惯从左到右遍历。最后只需要把部分list翻转一下,就得到了从右到左的遍历。当然也可以在往list里面添加的时候使用...

2019-01-16 22:50:58

阅读数 17

评论数 0

【Breadth-first Search 】785. Is Graph Bipartite?

输入:一个无向图graph。graph[i] 的值是一些节点,表示从i到这些节点有边。图中节点用0到graph.length-1表示。这个图没有指向自己的边,也就是说节点i不会有指向节点i的边。输入中不会有重复的边。 输出:如果这个图是bipartite,返回true;否则返回false。 规则:...

2019-01-08 09:08:24

阅读数 38

评论数 0

【Breadth-first Search 】934. Shortest Bridge

输入:一个二维数组,每个元素的值为0/1。 规则:所有连在一起的1是一个岛屿,数组中包含2个岛屿。连在一起是指上下左右4个方向。可以将0变为1,将2个岛屿链接在一起。 输出:最小改变多少个0就可以将2个岛屿链接在一起。 分析:数组中只有2个岛屿。可以先遍历数组找到第一个值为1的坐标。DFS找...

2019-01-06 15:49:04

阅读数 50

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭