
数据结构与算法
快乐的小狮子
其实对于每个人地心引力都是不同的
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
树形结构之二叉树基础(一)
在此之前学习的数据结构都属于线性结构,线性结构的特点是逻辑结构简单,易于进行查找,插入和删除的操作,其主要用于对客观世界中具有单一的前驱和后继的数据关系进行描述,而现实生活中的许多事物的关系并非这样简单,如人类社会的族谱,各种社会组织机构以及城市交通、通讯等,采用非线性结构进行描绘会更明确和便利。所谓非线性结构是指,在该结构中至少存在一个数据元素,有两个或两个以上的直接前驱(或直接后继元素)树原创 2017-05-11 16:32:54 · 659 阅读 · 0 评论 -
剑指offer——两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。分析:看到题目我们会想到最简单的一种方法,就是从头开始对两个链表进行遍历,对每一对结点进行比较,直到返回相同的结点,但是这种方法的时间复杂度相当高,如果链表的长度分别为m、n,那么时间复杂度为O(mn),这显然是很浪费资源的,在面试中也是不可取的。所以我们开始考虑第二种方法:如果是将链表从末尾向头部进行比较的话,那么可以有效降低时间复杂度,使用栈就原创 2017-07-05 20:24:17 · 445 阅读 · 0 评论 -
剑指offer——空格替换
题目: 请实现一个函数,把字符串的每个空格替换成%20,例如输入“We are happy”,则输出“We%20are%20happy”。分析:我们首先能想到的是最简单最直接的方法就是遍历这个字符串数组,判断是否是空格,如果是空格,则进行替换;想法则继续遍历。但是这种方法有一个最大的弊端,e就是这种算法的时间复杂度相当高,是O(n^2),这样的算法是不可取的,虽然简单,但是时间复杂度如此大,是原创 2017-06-27 09:30:42 · 429 阅读 · 0 评论 -
剑指offer——二维数组
题目:在一个二位数组中,每一行都按照从左到右的递增顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二位数和一个整数,判断数组中是否包含该整数:分析这个问题时,我们大部分人都会把它想成一个二位矩阵,最简单的方法就是像一个一维数组一样从第一个Martix[0][0]开始向后遍历至最后一个,如果出现相等的数字就输出true,否则输出false,但是当我们仔细分析题目就会发原创 2017-06-26 10:58:50 · 407 阅读 · 0 评论 -
剑指offer——两个合并排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结构点仍然是按照递增排序的。例如输入图中链表并使新链表中的结点仍然是按照递增排序的。例如图中的链表分析:我们应该从两部分开始考虑一个部分就是链表的特殊情况问题:1、如果俩表1为空,或者链表2为空,或者都为空,我们的实际链表输出是怎样的,这是代码的鲁棒性问题,我们要学会分开情况进行讨论。2、对于这种链表合并的问题,我们要注原创 2017-07-04 19:36:44 · 500 阅读 · 0 评论 -
剑指offer——反转链表
题目:输入一个链表,要求给出它的反转链表public static Node ReverseList(Node head){ //在这里定义两个临时变量,用于链表的移动和指向 Node pre = null; Node temp= null; if(head==null) return null;//首先判断head链表是否为空,如果为空返回null while(head!=原创 2017-07-04 10:23:56 · 405 阅读 · 0 评论 -
剑指offer——输出链表倒数第K个结点
题目:i输入一个链表,输出链表的倒数第K个结点本体考虑到链表的特殊性问题,如果按照一般思路思考,我们可以先将链表遍历到最后一个结点,然后再从前向后遍历找到倒数第k个结点。但是链表不允许从后向前进行遍历,所以这种方法我们不考虑。为了解决这个问题,我们可以使用两个指针,当然Java里不包括指针,这里可以称作游标。我们考虑到倒数第k个结点,就是第n-k+1个结点,我们可以让两个游标都指向head头结原创 2017-07-04 09:16:59 · 385 阅读 · 0 评论 -
剑指offer——在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个指针,定义一个函数在O(1)时间删除该结点class Node{//创建链表类 String value; Node next; public Node(String value) { // TODO Auteo-generated constructor stub this.value = value; } public String g原创 2017-06-30 09:36:03 · 698 阅读 · 0 评论 -
剑指offer——链表反转之栈方法
题目:输入一个链表的头结点,从头到尾的打印出每个结点的值上一次我用递归的思想实现了链表的反转,这次我将使用栈的思想来解决会问问题,因为栈的特殊性,后入先出的特点,所以我们可以将链表内的元素遍历,然后在循环中push进一个全新的栈中,之后再打印栈即可。相比起递归的思想,我更加喜欢借助栈的思想解决问题,因为Java的特殊性,为我么提示了许多形成的函数方法可以使用。下面将展示代码:package原创 2017-06-29 09:19:07 · 1920 阅读 · 0 评论 -
99乘法表
下面是递归实现的代码描述:package test.m;public class test99 { public static void main(String[] args){ m(9); } /* * 打印99乘法表 * */ public static void m(int i){ if(i==1){转载 2017-03-21 17:40:57 · 340 阅读 · 0 评论 -
剑指offer——链表的递归反转打印
题目:输入一个链表的头结点,从头到尾反向打印出每个结点的值这里主要考查的是链表的知识,反向反转如果不考虑更改链表的结构时,可以考虑非递归的直接倒置算法,这里我们主要考虑递归方法的反转打印递归思想是先按照顺序将指针指向链表的最后然后将nextNode的next指向前一个位置的指针,把前一个位置的值加到最后,最后时限倒置public static class Node{ //声明链表原创 2017-06-28 09:20:38 · 487 阅读 · 0 评论