算法
Q蛋黄酱
这个作者很懒,什么都没留下…
展开
-
寻找单向链表中含有环的入口节点
这是一个比较基本的链表问题。总结一下,可以扩展为以下几类问题:判断链表中是否有环求链表中环的长度求环的入口节点的位置带环链表的长度解法:判断是否有环: 可以利用快慢指针追赶的方式,即设定两个指针,slow、fast,slow指针每次走一步,fast指针每次走两步,如果存在环,则两个指针会相遇,即slow.val==fast.val;如果不存在环,则fast指针会先于slow到达链表结尾原创 2017-05-14 17:44:50 · 365 阅读 · 0 评论 -
二叉排序树建立(JAVA实现)
最近看了一下二叉排序树的建立,自己写了一段代码,用来建立二叉排序树,给定一个数组,对这个数组中的数字进行建立二叉排序树。分两种情况: 1 数组中的数字是随机的,也就是说没有顺序 eg : int a [ ] = {3,1,2,5,0,7,9,8} ,用这个数组中的数字建立二叉排序树,注意这里的二叉排序树是随便的,没有特殊的要求(比如建立高度最小的二叉排序树),可知二叉排序树是不转载 2017-08-22 17:13:35 · 1063 阅读 · 2 评论 -
归并排序(Mergesort)之Java实现
归并排序算法介绍归并排序是一个分治算法(Divide and Conquer)的一个典型实例,把一个数组分为两个大小相近(最多差一个)的子数组,分别把子数组都排好序之后通过归并(Merge)手法合成一个大的排好序的数组,归并的过程依然用扑克来解释,想象一下桌子上有两堆排好序(从小到大)的牌,每一次从两堆里面各抽取一张,比较一下两张的大小,如果两张一样大,都取出放到目标数组,否则取出较小的放转载 2017-08-21 23:03:31 · 498 阅读 · 0 评论 -
快速排序(Quicktsort)之Java实现
快速排序算法介绍快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。基准元素的选取对算法的效率影响很大,最好的情况是两转载 2017-08-21 22:59:41 · 205 阅读 · 0 评论 -
动态规划、分治法与贪心算法的区别
分治法与动态规划的相同点: 分治法与动态规划,二者要求原问题具有最有子结构,都是将问题分而治之分解成若干个规模较小的子问题;不同点: 动态规划是将原问题分解为多个子问题,通过计算出子问题的结果构造一个最优解。动态规划通过迭代法自底向上求解,动态规划将分解后的子问题理解为相互间有联系,有重叠的部分; 算法的应用:装配线,矩阵乘法,最长公共子序列,构造最优的二叉树 分治法是将原问题分解为多个子问原创 2017-08-11 09:04:36 · 1977 阅读 · 0 评论 -
JAVA中关于链表的操作和基本算法
import java.util.HashMap; import java.util.Scanner; import java.util.Stack; /** * * @author kerryfish * 关于java中链表的操作 * 1. 求单链表中结点的个数: getListLength * 2. 将单链表反转: reverseLi转载 2017-07-26 09:20:07 · 210 阅读 · 0 评论 -
136. Single Number
Given an array of integers, every element appears twice except for one. Find that single one.题意: 给出一个整型数组,数组中除了一个元素出现一次之外,其余均重复两次,设计一个算法,找出这个数。思路: 1、leetcode上Easy难度的题,如果允许使用额外的空间复杂度的话原创 2017-06-12 20:42:38 · 238 阅读 · 0 评论 -
数据结构——二叉树学习
一:树我们思维中的”树“就是一种枝繁叶茂的形象,那么数据结构中的”树“该是怎么样呢?对的,他是一种现实中倒立的树。 1:术语 其实树中有很多术语的,这个是我们学习树形结构必须掌握的。 <1> 父节点,子节点,兄弟节点 这个就比较简单了,B和C的父节点就是A,反过来说就是B和C是A的子节点。B和C就是兄弟节点。 <2> 结点的度 其实”度“就是原创 2017-05-22 16:12:53 · 493 阅读 · 0 评论 -
515. Find Largest Value in Each Tree Row
You need to find the largest value in each row of a binary tree. Example: Input: 1 / \ 3 2 / \ \ 5 3 9 Output: [1, 3, 9] 题意:找出二叉树中,每层节点中的最大值。解题思路: BFS(广度优先搜索),可以看原创 2017-06-01 17:03:57 · 218 阅读 · 0 评论 -
442. Find All Duplicates in an Array[Medium]
Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.Find all the elements that appear twice in this array.Could you do it without extra space原创 2017-06-01 17:00:04 · 224 阅读 · 0 评论 -
数据结构-算法-时间复杂度计算
算法的时间复杂度定义为:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n}=0(f(n))。它表示随问题规模n的增大,算法执行时间的埔长率和 f(n)的埔长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f( n)是问题规横n的某个函数。根据定转载 2017-09-12 08:16:57 · 503 阅读 · 0 评论