- 浏览: 7429 次
- 性别:
- 来自: 武汉
最新评论
文章列表
本篇博文给大家介绍前N个正整数的排列求解的三种方式。第一种是暴力求解法;第二种则另外声明了一个长度为N的数组,并且将已经排列过的数字保存其中;第三种方式则采用了另外一种思路,即首先获取N个整数的升 ...
在实际应用中,由于中缀表达式计算的复杂度较大,并且计算式占用的空间较多,而后缀表达式在理论上可以计算任意复杂度的表达式,并且利用栈的特点每次只需要对栈顶元素进行操作即可,因而将中缀表达式转换为后缀表达式之后将会对计算效率大大提高。
后缀表达式的计算规则为:当遇到操作数(数字)时就将其入栈,当遇到操作符时就取出栈顶的两个元素,根据当前操作符进行计算,将计算结果再压入栈顶。如果表达式是规整的表达式,在整个表达式扫描完成之后栈顶将只有一个数字,该数据即为计算结果。
具体的代码如下:
import java.util.Stack;
public c ...
在对表达式(中缀表达式)的运算求值的过程中,如果表达式比较复杂,那么对于计算机的内存和运算效率都有很大的浪费,而后缀表达式则没有此类困扰。理论上,后缀表达式可以计算任意复杂的计算式,并且其消耗的空间也只有少量的栈空间,栈中保存的只是转换过程中的运算符。本文则讲述了如何将中缀表达式转换为后缀表达式,实际代码如下:
import java.util.Stack;
public class MiddleToLast {
public static String transfer(String str) {
StringBuilder result = new S ...
本文使用分治思想求解一个整型数组中的最大子序列,该算法的时间复杂度为NlogN,使用千万级的数据量计算结果的时间不超过0.5s。该算法使用了分治的思想:求解最大子序列的问题可以理解为将整个数组分成左右两部分,分别求解左边和 右边的最大子序列,并且还有一种情况是最大子序列在中间,此时可以可以直接从中间开始分别向左和向右遍历求解左右两边的最大子序列(由于此时假定最大子序列在中间,因而中间的元素肯定在最大子序列中),然后将两边的最大子序列相加就会得到最大子序列在中间时的子序列,此时当前数组就会有三个(左边,右边和中间)已经求得的最大子序列,现只需要比较这三个子序列的和即可,将最大和返 ...
我们在做企业开发的时候,有时会遇到一种情况就是有一个类,其部分数据被多个类所依赖,被依赖的类也不知道依赖类的具体实现情况,此时我们就可以使用观察者模式,这里依赖类称为观察者,被依赖的类称为被观察者。观察者可以有多个,被观察者只能有一个,被观察者的数据变化将“同步实时“更新到观察者类中。
如果一个类被多个类所依赖,并且这些类产生的行为将会因为这个类的部分数据的变化而变化,那么我们就可以使用观察者模式,由于java的基础类库中已经提供了对于观察者模式的支持,因而在java中使用观察者模式非常简单。观察者类只需要继承Observer类,并且实现update方法即可,而 ...
使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节。注解就是用于修饰类、全局变量、方法、参数或局部变量的接口,java中规定,注解的使用不允许影响其修饰类的存在,也就是说如果将一个类的注解全部删除,这个类也能够编译通过。java中,注解的应用主要有四个方面:类注解,全局变量注解,方法注解,参数注解。其他的还有诸如包注解和局部变量注解这里暂不作讨论。首先我们定义一个类注解如下:
package annotation;
import java.lang.annotation.ElementType;
impor ...
在web或其他应用中,经常我们需要导出或者预览word文档,比较实际的例子有招聘网站上预览或者导出个人简历,使用POI导出excel会非常的方便,但是如果想导出word,由于其格式控制非常复杂,故而使用POI将会非常麻烦,而FreeMarker则可以较好的解决这个问题;并且,根据FreeMarker的实现原理,预览word也会变得非常简单。
FreeMarker主要有三个部分:模板,数据源以及数据的存储。可想而知,在导出word的时候,我们必须得告诉FreeMarker我们需要导出的word的格式以及将要填充到这个word中的数据,因而模板和数据源是我们需要准备 ...