Java算法
Star_Li_92
学如逆水行舟,不进则退。
展开
-
JAVA算法——排序之归并排序
JAVA算法——排序之归并排序归并排序是一种基于“分治”策略的一种算法。归并排序算法是典型的分治算法,对于规模较大的问题,可以分解成若干容易求解的简单的问题,最后把解合并构成初始问题的解。1 合并两个有序数组这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。void m...原创 2018-06-05 20:49:03 · 211 阅读 · 0 评论 -
剑指offer——数组中的逆序对
剑指offer——数组中的逆序对题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述: 题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size...原创 2018-06-06 09:49:27 · 194 阅读 · 0 评论 -
剑指offer——平衡二叉树的判定
剑指offer——平衡二叉树的判定题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。我的解法:利用求二叉树的深度判断平衡二叉树解法一:递归判断public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==null){ ...原创 2018-06-06 19:17:16 · 207 阅读 · 0 评论 -
Java——求二叉树的深度
Java——求二叉树的深度题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。利用递归求解class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tree...原创 2018-06-06 17:29:05 · 5487 阅读 · 0 评论 -
五大经典算法一 递归与分治
我们要讲到分治算法,我觉得有必要说一下递归,他们就像一对孪生兄弟,经常同时应用在算法设计中,并由此产生许多高效的算法。递归算法:直接或者间接不断反复调用自身来达到解决问题的方法。要求原始问题可以分解为相同问题的子问题。、需要:1 递归边界 2 自身调用特点分析:递归思路简单清晰,如果分析出将很快得到结果;递归将多次调用,使用到堆栈,算法效率低,费时费内存。常用场景:阶乘,斐波...转载 2018-08-08 23:06:36 · 1314 阅读 · 0 评论 -
五大经典算法二 回溯
回溯算法在解决多选择问题时特别有效,一般思路如下:在当前场景下,存在若干种选择去操作,有可能两种结果:一是违反相应条件限制,只能返回(back),另一种是该选择选到最后居然正确并结束。故在回溯时存在三要素,能总结出这样的三要素问题便可以迅速解决:1 找到选择2 限制条件,即选择操作在此条件下才进行3 结束回溯在迷宫问题等应用广泛,下面的Leetcode22题Generate Pa...转载 2018-08-08 23:09:19 · 827 阅读 · 0 评论 -
五大经典算法之三动态递归DP
五大经典算法 动态递归DP首先需要决定存储什么历史信息,以及用什么数据结构来存储。然后最重要的就是递推公式,最后需要考虑起始条件的值。Leetcode 139. Word Break要求一个非空字符串s,一个非空的字符串词典,判断s能够通过空格组成一个序列是词典里的多个单词:例如s=”leetcode”dict=[“leet”,”code”]因为“leetcode”可以改成“le...转载 2018-08-08 23:11:32 · 1210 阅读 · 0 评论 -
五大经典算法之四贪心算法
基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择,贪心策略使用的前提是局部最优能导致全局最优。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,...转载 2018-08-08 23:12:54 · 693 阅读 · 0 评论 -
Java实现约瑟夫环:50个人围成一圈数数,从1开始报数,数到3的人退出,求最后剩下的人的编号
题目约瑟夫环问题:50个人围成一圈数数,从1开始报数,数到3的人退出,求最后剩下的人的编号.C++算法思想:把这n个人放在一个数组中,对映下标的元素值为下标值加1,当数到3时将该下标的元素值设置为0,数组到头时重新开始,直到数组中只剩一个数为止。Java实现利用可变数组ArrayList实现。 算法思想:将所有人的报数放到链表内;利用链表,将链表表头挨个移除,并放到表的后面,...原创 2018-08-27 21:52:29 · 5193 阅读 · 0 评论