算法与数据结构
围巢111
这个作者很懒,什么都没留下…
展开
-
LeetCode(环形链表)
题目描述:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:...原创 2019-04-12 20:45:32 · 520 阅读 · 0 评论 -
二叉树的遍历(前,中,后,层序)
二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中所有节点,使得每个节点仅被访问一次前序遍历若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再前序遍历右子树。结果是:ABDGHCEIF中序遍历:若树为空,则空操作返回,否则从根节点开始(注意并不是先访问根节点),中序遍历根节点的左子树,然后访问根节点,最后中序遍历右子树结果是:GDHBAEICF后序遍历:...原创 2019-05-12 18:20:23 · 763 阅读 · 0 评论 -
二叉树的基本概念和特点
首先,什么是二叉树?二叉树(Binary Tree)是n (n>=0)个节点的有限集合,该集合可以为空集(称为空二叉树),或者由一个根节点和两个互不相交的,分别称为根节点的左子树和右子树的二叉树组成。所以这是二叉树吗?错,上图并不是一个二叉树由此引入二叉树特点:1.每个节点最多有两个子树,所以二叉树不存在度大于2的节点(结点的度:结点拥有的子树的数目。),可以没有子树或者一个子树...原创 2019-05-12 17:11:09 · 14387 阅读 · 1 评论 -
LeetCode(相交链表)
题目描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8...原创 2019-05-07 15:48:24 · 326 阅读 · 0 评论 -
Java实现8皇后问题
八皇后问题要将八个皇后放在棋盘上,任何两个皇后都不能互相攻击。即没有两个皇后是在同一行、同一列或者同一对角上。代码package javase5;public class EightQueen { private static int count=0; //记录第几种可能 private static int N=8; public static void main(String[...原创 2019-05-07 13:28:57 · 411 阅读 · 0 评论 -
LeetCode(两数相加)
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&g...原创 2019-05-09 17:42:08 · 103 阅读 · 0 评论 -
LeetCode(两数之和)
题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路一:暴...原创 2019-05-09 16:58:00 · 106 阅读 · 0 评论 -
LeetCode(合并两个有序链表)
题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4代码:class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2...原创 2019-05-09 16:11:58 · 115 阅读 · 0 评论 -
LeetCode(回文链表)
题目:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true代码1//获取链表的长度 int length = 0; ListNode node = head; if(null == head.next){ length = 1; }e...原创 2019-05-09 15:12:45 · 911 阅读 · 0 评论 -
Java实现汉诺塔问题
问题简介:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。汉诺塔问题图示分析:...原创 2019-05-06 18:43:22 · 1375 阅读 · 0 评论 -
LeetCode(奇偶链表)
题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->...原创 2019-05-09 11:55:44 · 105 阅读 · 0 评论 -
LeetCode(移除链表元素)
题目描述:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5代码:class Solution{ public ListNode removeElements(ListNode head, int val) { ...原创 2019-05-08 19:14:44 · 242 阅读 · 0 评论 -
线性表的动态数组实现ArrayList
1.何为线性表首先说什么是线性表线性表的定义:线性表中数据元素之间的关系是一对一的关系,即除了第一个元素没有前驱,最后一个元素没有后继之外,其余元素既有唯一前驱和唯一后继,如下图所示搞懂什么是线性表之后,我们再考虑一个问题,线性表能干啥?手机上的通讯录是不是符合一个线性表的定义?刺激战场中背包内容是不是符合一个线性表的定义?学校中的成绩单是不...转载 2019-05-05 23:37:43 · 285 阅读 · 0 评论 -
LeetCode(反转链表)
题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL代码1:class Solution { public ListNode reverseList(ListNode head) { if(head==null||...原创 2019-05-08 12:34:26 · 105 阅读 · 0 评论 -
LeetCode(删除链表的倒数第N个节点)
题目描述:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。代码class Solution { public ListNode removeNthFromE...原创 2019-05-08 11:41:17 · 98 阅读 · 0 评论 -
二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。时间复杂度 O(log2n)图解代码:/* * 查找: * 基本查找----数组元素无序,从头查到尾 * 二分查找----数组元素有序,也叫折半查找,无序数组不能使用 * * */public class Binar...原创 2019-04-20 15:21:22 · 207 阅读 · 0 评论 -
排序算法之选择排序
选择排序图解时间复杂度选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+…+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆...原创 2019-04-16 21:15:19 · 321 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序图解原创 2019-04-16 20:46:34 · 485 阅读 · 2 评论 -
图的术语总结
图的内容很多,看起来很绕,总结一下,方便理解1.图按照有无方向分为无向图和有向图。无向图由顶点和边构成,有向图由顶点和弧构成。弧有弧尾和弧头之分。2.图按照边或弧的多少分为稀疏图和稠密图。如果任意两个顶点之间都存在边叫完全图,有向的叫有向完全图。3.图中顶点之间有邻接点,依附的概念。无向图顶点的边数叫做度,有向图顶点分为入度和出度。4.图上边或弧上带权则成为网。5.图中顶点间存在路径,两...原创 2019-05-27 10:55:31 · 781 阅读 · 0 评论