算法
文章平均质量分 71
李意文
这个作者很懒,什么都没留下…
展开
-
将递归程序转变为迭代程序的方法
在面试中,我们经常会被要求写一段程序解决某一个问题或提供某个功能,当我们写出用递归给出解法后,面试官往往会问有没有迭代的解法,这个时候面试者经常是束手无措,因为老实说迭代的解法是比较难相处的,所以本文就提供将递归程序转变为迭代程序的通用方法。原创 2016-11-18 15:11:39 · 7449 阅读 · 1 评论 -
如何只遍历一次判断一棵二叉树是否为平衡二叉树
平衡二叉树的定义是对于二叉树中任何一个节点来说它的左子树和右子数的深度之差小于等于一。 现在要只遍历一次判断一棵二叉树是否为平衡二叉树,这个问题可以这样分析,假设p为二叉树中的任何一个节点,f(p)表示以p为根节点的子树是否为平衡二叉树,则f(p)满足 1,当p不为null时,则f(p)为真,当且仅当f(pleft)为真,且f(pright)为真,且pleft和pri原创 2015-11-20 21:47:03 · 795 阅读 · 0 评论 -
时间复杂度最快的排序算法 O(n) JAVA代码
时间复杂度最低的排序算法,为O(n),但是需要O(n)的空间复杂度。用哈希的思想来做的。package AlgorithmTest;/** * Created by dell on 2015/10/5. */public class MostQuickSortHashSortTest { public static void main(String[] args) {原创 2015-10-05 17:05:14 · 3057 阅读 · 1 评论 -
二叉树的三种遍历方式的递归实现和迭代实现
数据与算法的课程中,给出了二叉树三种遍历方式的实现代码但是没有给出其递归实现。本文给出迭代实现。原创 2016-12-04 14:43:59 · 1963 阅读 · 1 评论 -
怎么删除一个没有头指针的单链表的一个节点?
怎么删除一个没有头指针的单链表的一个节点?原创 2016-12-05 09:58:04 · 2477 阅读 · 0 评论 -
平衡二叉树的实现 java
平衡二叉树的实现:程序输出结果为:前序遍历结果:8 5 2 7 6 9 69 中序遍历结果2 5 6 7 8 9 69 两种遍历结果可以唯一确定一颗二叉树,从而得出二叉树如下图所示:为一颗平衡二叉树。 代码如下所示:package AlgorithmTest;/**原创 2016-12-15 00:17:39 · 760 阅读 · 0 评论 -
打印图形
打印如上图形:控制台输出:**.*.*..*..*..*...*...*...*...*....*....*....*....*....*.....*.....*.....*.....*.....*.....*......*......*......*......*......*......*......*.......*.......*.......*....原创 2016-12-17 17:07:06 · 2484 阅读 · 0 评论 -
采用回溯法打印1到最大的位数
打印1到最大的位数,算法采用回溯法控制台输出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44原创 2016-12-21 17:18:38 · 364 阅读 · 0 评论 -
用位操作求加法
/** * 不用+法做加法 * @author liyiwen1 * @date 2016/12/21 */public class BitAdd { public static void main(String[] args) { System.out.println(add(1,2)); System.out.println(add(1,3))原创 2016-12-21 18:01:21 · 501 阅读 · 0 评论 -
回溯法,并用回溯法请求0/1背包问题和皇后问题
穷举法是所有最优化问题和多解问题的通用解法。在用穷举法求解的过程中,很多候选的解可以在求解中途被约束条件淘汰点,从而降低求解的复杂度。基于这种思想引出了回溯法。回溯法是穷举法的一个改进,因为它也是一种通用的算法。一个问题可能会有多种可能解,这些可能解构成的问题的可能解空间, 可能解空间不是解的集合而是可能解的集合,解空间是可能解的一个子集。问题的解会从解空间中出。回溯法的基本思想是将问原创 2016-12-18 12:31:11 · 1378 阅读 · 0 评论 -
用回溯法求解打靶问题
打靶打10次,打中90环的可能性有多少?用回溯法实现:控制台输出:递归实现:打10次90环的可能性:92378种迭代实现:打10次90环的可能性:92378种package AlgorithmTest;import java.util.Stack;/** * Created by dell on 2016/12/18. */public c原创 2016-12-18 18:06:22 · 472 阅读 · 0 评论 -
用筛选法求解n以内的所有素数
筛选法的思想是一个数是素数则这个数的所有的倍数都是合数,我们不去找素数而去找合数,剩下的就是素数了。一个合数其最大的质因子不会超过其开发数,所以只要迭代到其最大数的开方数即可一个简单的筛素数的过程:n=30。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30原创 2016-12-18 21:42:57 · 5141 阅读 · 0 评论 -
用回溯法求解0/1背包问题
输出如下:背包所盛放物品的最大价值为:60所盛放物品编号为[1, 2]代码如下:package AlgorithmTest;import java.util.ArrayList;import java.util.Collections;/** * Created by dell on 2016/12 *用回溯法求解01背包问题,回溯法可以求解最原创 2016-12-18 01:17:35 · 4782 阅读 · 0 评论 -
如何创建一颗二叉链表的二叉树?
如何创建一颗二叉链表的二叉树?非常的简单,就是将二叉树的数组表示,转化为二叉链表。如下如所示的树,其数组表示为:{1,2,3,4,5,6,null,null,null, 7,8}节点的内容保存在数组中,节点间的父子兄弟关系保存在数组的下标中。测试:控制台输出:前序遍历12457836中序遍历42758163原创 2017-01-01 09:41:54 · 5806 阅读 · 0 评论 -
二叉树的分层遍历的汇总
二叉树的分层遍历分成一下五种。1、从上到下分层遍历,每层从左到右,设置双指针,一个指针指向队列中二叉树一层的第一个节点,另外一个指针表示这一层的结尾节点的下一个节点2、从上到下分层遍历,每层从右到左, 2有1改变左右孩子的入队列顺序即可。3、从下到上分层遍历,每层从左往右, 要标示出二叉树的分层。之后逆序输出。4、从下到上分层遍历,每层从右往左,4由三变化左右孩子的入队列顺原创 2017-01-01 19:29:29 · 749 阅读 · 0 评论 -
图的邻接矩阵表示、广度优先遍历和深度优先遍历
如上如的所示,对图节点进行编号,每个节点又有相应的编号和值。因此图可以有一个二阶矩阵来记录各个节点的联通关系,由一个数组来记录各个节点的内容。图的广度优先遍历和深度优先遍历。输出如下:深度优先遍历:12485637广度优先遍历:12345678代码如下:import java.util.ArrayD原创 2017-01-18 18:35:16 · 6967 阅读 · 0 评论 -
连续字数组的最大和
题目:输入一个整形数组,数组中有正有负,数组中一个或连续多个整数组成一个字数组。求所有子数组的和的最大值。用f(i)表示以第i个数为结尾的子数组的和的最大值,则有则当i = 0 或者 f(i - 1) 否则f(i) = f(i - 1) + data[i]。所以所有子数组的和的最大值=max [ f(i)] , i = 0,1....n-1。java代码如下:publi原创 2015-11-18 22:08:17 · 514 阅读 · 0 评论 -
二叉排序树转化为顺序双链表 JAVA实现
package AlgorithmTest;/** * Created by dell on 2015/10/7. */public class BinarySortToDequeTest { public static void main(String[] args) { BinarySearchTree binarySearchTree = new Binar原创 2015-10-08 10:15:36 · 372 阅读 · 0 评论 -
请用递归和迭代两种方式输出文件目录结构
输出文件目录结构原创 2016-11-18 15:17:26 · 374 阅读 · 0 评论 -
并查集
import java.util.*;/** * @author liyiwen1 * @date 2016/12/8 */public class MergingFindingSet { public static void main(String[] args) { resolveProblem1UsingMergingFindSet();原创 2016-12-09 11:15:45 · 377 阅读 · 0 评论 -
trie树的实现和应用及测试
测试输出为:按字典顺序输出trie树中所有的字符串 递归实现: abc abc abcd aca adac ava bda按字典顺序输出trie树中所有的字符串 迭代实现: abc abc abcd aca adac ava bda是否出现字符串ava:true前缀a出现的次数:6输出还有前缀的ab的所有字符串:abc原创 2016-12-07 22:32:47 · 530 阅读 · 0 评论 -
快速排序,归并排序,堆排序的java代码实现
package SortAlgorithm;import java.util.ArrayList;/** * Created by yanzan.lyw on 2015/8/10. */public class AdvancedSortUtils { public static void main(String[] args) { int [] arrray原创 2015-08-13 19:27:59 · 671 阅读 · 0 评论 -
二叉查找树的java实现
package TestBinarySearchTree;/** * Created by yanzan.lyw on 2015/8/7. */public class BinarySearchTree { static private class Node{ int val; Node nodeLeft; Node nodeR原创 2015-08-13 19:29:51 · 497 阅读 · 0 评论 -
求解一个字符串的所有字符的组合 Java代码
package day_10_1;import java.util.*;public class Main { public static Set stringSet = new TreeSetnew CompareAccordToStringLength()); public static void main(String[] args) { getA原创 2015-10-01 13:50:50 · 445 阅读 · 0 评论 -
求解一个字符串的所有排列 java实现
import java.util.ArrayList;import java.util.List;import java.util.Set;import java.util.TreeSet;/** * Created by dell on 2015/10/1. */public class StringPailieTest { public static Set strin原创 2015-10-01 18:43:32 · 437 阅读 · 0 评论 -
递归求解数组的和 Java实现
package AlgorithmTest;/** * Created by dell on 2015/10/1. */public class GetArraySumWithRecursionTest { public static void main(String[] args) { int[] array = new int[]{1, 2, 3, 4};原创 2015-10-01 19:00:44 · 680 阅读 · 0 评论 -
Trie树的java实现
package com.liyiwen.TestTrie;/** * Created by dell on 2015/7/12. */public class Trie { private int size = 26; private TrieNode root; private class TrieNode{ private int passC原创 2015-10-01 19:04:31 · 345 阅读 · 0 评论 -
用递归判断一个数组是否递增 JAVA代码
package AlgorithmTest;/** * Created by dell on 2015/10/1. */public class JadgeIncreseArrayWithRecursionTest { public static void main(String[] args) { int[] array = new int[]{1, 2, 5,原创 2015-10-01 21:00:13 · 1822 阅读 · 0 评论 -
用递归实现二分查找 JAVA
package AlgorithmTest;import java.util.Arrays;/** * Created by dell on 2015/10/1. */public class BinarySearchWithRecusionTest { public static void main(String[] args) { int[] array原创 2015-10-01 22:26:57 · 614 阅读 · 0 评论 -
找数组中出现超过一半的数 JAVA
package AlgorithmTest;/** * Created by dell on 2015/10/1. *///一个数组中有一个数,出现的次数超过数组大小的一半public class FindMostApperseTest { public static void main(String[] args) { int[] array = new in原创 2015-10-01 23:27:05 · 513 阅读 · 1 评论 -
一直二叉树的前序遍历和中序遍历的结果,重建该二叉树 Java代码实现
package AlgorithmTest;/** * Created by dell on 2015/10/5. */public class RecreateBinaryTreeTest { public static void main(String[] args) { int[] preTraverseArr = new int[]{1, 2, 4, 7,原创 2015-10-05 14:33:31 · 397 阅读 · 0 评论 -
斐波那契数列的非递归实现 JAVA
package AlgorithmTest;/** * Created by dell on 2015/10/5. */public class FabonacciCircleImplementTest { public static void main(String[] args) { System.out.println(FabonacciCircleImpl原创 2015-10-05 22:41:12 · 934 阅读 · 0 评论 -
用非递归方法实现 求解字符串组合的问题 JAVA代码
求解一个字符串的所有组合,比如“abcd”,则用数0001 - 1111。来表示某位为0时表示字符串中相应的字符无,为1时表示相应的字符有。所以实现一个字符串的二进制数,令其能实现加1的运算。代码如下。主函数中是测试代码package AlgorithmTest;/** * Created by dell on 2015/10/6. */public class Stri原创 2015-10-06 15:16:01 · 520 阅读 · 0 评论 -
elasticsearch
主要内容主要内容什么是ElasticsearchES的基本概念和原理安装和配置Rest api定义ElasticSearch是一个开源的基于Lucene构建的,分布式的,RESTful搜索引擎。Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta原创 2017-03-09 16:28:02 · 388 阅读 · 0 评论