??xml version="1.0" encoding="utf-8" standalone="yes"?>国产欧美一区二区在线观看,日韩av综合中文字幕,亚洲成人a级网 http://www.aygfsteel.com/dongisland/把握每一天的_ֽ zh-cn Thu, 22 May 2025 10:00:04 GMT Thu, 22 May 2025 10:00:04 GMT 60 java求连l子数组的和最?/title> http://www.aygfsteel.com/dongisland/archive/2014/03/05/410637.htmldongisland dongisland Wed, 05 Mar 2014 03:47:00 GMT http://www.aygfsteel.com/dongisland/archive/2014/03/05/410637.html http://www.aygfsteel.com/dongisland/comments/410637.html http://www.aygfsteel.com/dongisland/archive/2014/03/05/410637.html#Feedback 0 http://www.aygfsteel.com/dongisland/comments/commentRss/410637.html http://www.aygfsteel.com/dongisland/services/trackbacks/410637.html 题目描述Q?/strong> 输入一个整形数l,数组里有正数也有负数。数l中q箋的一个或多个整数l成一个子数组Q每个子数组都有一个和?/p>求所有子数组的和的最大倹{要求时间复杂度为O(n)?/p>
思\Q?/strong>
我们可以使用分治法或者减L来处理这个问题?/p>
分治? 目标Q把1个大问题分成2个小问题Q?个小问题q可以再分,直到问题规模的可以单解冟?br />
该数组{分成两个子数组Q假如知道左右两侧两个数l的各自的最大子数组和,那么整个数组的最大子数组和可能ؓ三种情况Q?/p>
右侧数组的最大子数组?/li> 左侧数组的最大子数组?/li> 左右两侧数组中间毗邻位置q接形成的子数组的和的最大|?6Q?Q?3Q?####5Q?6Q?Q?8Q左侧最大gؓ4Q右侧ؓ9Q中间毗M|从2?向两侧相加,得到中间毗邻子数l?Q?3Q?Q?Q?6Q?和ؓ11Q三者比较得最大子数组和ؓ11Q?/li> 递归到数l中只包含一个数字?/p>
q种思\也是可行的。进行ln(n)ơ拆分,每次拆分后进行nơ比较,所以算法复杂度为n*ln(n)。但q达不到题目的要求?/p>
java代码Q?br />
1 package com.island.info; 2 /** 3 * <p>Title: TestMaxArray.java</p> 4 * <p>Description: 分治法求解连l和最?lt;/p> 5 * @date 2014-3-05 6 * 7 */ 8 9 public class MaxSub {10 static int arr[] = {4,-3,5,-2,-1,2,6,-2}; // 也可以随机生?/span>11 public static void main(String args[]){12 System.out.println(max(arr));13 }14 15 // 包装函数 16 public static int max(final int [] arr){17 System.out.println("(1)*****arr.length-1----------------->:"+ (arr.length-1));18 return max(arr,0,arr.length-1);19 }20 21 // 核心代码Q递归调用max() 22 public static int max(final int [] arr,int leftIndex, int rightIndex){23 System.out.println("(2)*****leftIndex--------rightIndex--->:"+leftIndex+"|***************|"+rightIndex);24 int sum = 0,leftHalfMax = 0, rightHalfMax = 0;25 if (rightIndex-leftIndex==0){26 return arr[rightIndex];27 } else {28 int center = (leftIndex+rightIndex)/2;// 2分查找中间节?/span>29 int maxLeft = max(arr,leftIndex,center);// 左边最大的 30 int maxRight = max(arr,center+1,rightIndex);// 双最大的 31 // 以下是查找跨中间点的最大子序列 32 // 从中点到左侧Q?/span>33 for (int i=center;i>=leftIndex;--i){34 sum+=arr[i];35 if (sum>leftHalfMax){36 leftHalfMax = sum;37 }38 }39 System.out.println("左边的sum----------->:"+sum);40 sum=0;41 // 从中点到右侧 42 for (int i=center+1;i<=rightIndex;++i){43 sum+=arr[i];44 if (sum>rightHalfMax){45 rightHalfMax = sum;46 }47 }48 System.out.println("双的sum----------->:"+sum);49 return max(maxLeft,maxRight,leftHalfMax+rightHalfMax);50 }51 }52 53 // 三者取最大?/span>54 public static int max(int a,int b,int c){55 return a>b?(a>c?a:c):(b>c?b:c);56 }57 }
减治?/strong>
目标Q将问题规模不断减小Q直到可以简单处理ؓ止?/p>
假设我们已知一个数l的最大子数组和,现在在该数组后面增加一个数字,新数l的最大子数组和可能是什么呢Q?/p>
原数l的最大子数组和; 新增加的数字为正敎ͼ和最右侧的子数组形成了一个新的最大子数组和(所以ؓ了通过一ơ遍历完成,我们需要保存最右侧的子数组的最大和Q?/li> 然后两个数字进行比较即可?/p>
所以减治至数组只包含最左侧一个数字,我们知道它的最大子数组和和最右侧子数l最大和都ؓq数字,逐次?个数字直到整个数l即可?/p>
java代码Q?br />
1 package com.island.info; 2 3 /** 4 * <p>Title: TestMaxArray.java</p> 5 * <p>Description: 分治法求解连l和最?lt;/p> 6 * @date 2014-3-05 7 * 8 */ 9 public class MaxSubArraySum { 10 11 private static long getMax( long a, long b) { 12 return a > b ? a : b; 13 } 14 15 /** 16 * 获得q箋子数l的最大和 17 * @param array 18 * @return 最大和Q此处用了Long型是Z表示当参Cؓnull或空Ӟ可以q回nullQ返回其它Q何数字都可能引v歧义?nbsp; 19 */ 20 21 public static Long getMax( int [] array) { 22 23 if (array == null || array.length <= 0 ) { 24 return null ; 25 } 26 27 long maxSum = array[ 0 ]; // 所有子数组中最大的?nbsp; 28 long righteEdge = array[ 0 ]; // 右侧子数l的最大和 29 for ( int i = 1 ; i < array.length; i ++ ) { 30 // 当右侧子数组的最大和数时Q对于新数组Q右侧子数组的最大和为新增加的数?nbsp; 31 if (righteEdge < 0 ) { 32 righteEdge = array[i]; 33 } else { // 为正数时Q对于新数组Q右侧子数组的最大和为新增加的数 + 原来的最大和?nbsp; 34 righteEdge += array[i]; 35 } 36 // 所有子数组中最大的?nbsp; 37 System.out.println( " righteEdge-------------maxSum: " + righteEdge + " **************** " + maxSum); 38 maxSum = getMax(righteEdge, maxSum); 39 } 40 return maxSum; 41 } 42 43 public static void main(String[] args) { 44 int [] array = { 1 , - 2 , 3 , 10 , - 4 , 7 , 2 , - 5 }; 45 // int arr[] = {4,-3,5,-2,-1,2,6,-2}; 46 System.out.println( " Max sum: " + MaxSubArraySum.getMax(array)); 47 } 48 49 }
]]> 单理解Ajax原理 http://www.aygfsteel.com/dongisland/archive/2014/03/05/410633.htmldongisland dongisland Wed, 05 Mar 2014 03:27:00 GMT http://www.aygfsteel.com/dongisland/archive/2014/03/05/410633.html http://www.aygfsteel.com/dongisland/comments/410633.html http://www.aygfsteel.com/dongisland/archive/2014/03/05/410633.html#Feedback 0 http://www.aygfsteel.com/dongisland/comments/commentRss/410633.html http://www.aygfsteel.com/dongisland/services/trackbacks/410633.html Ajax的原理就?通过javascript的方式,前台数据通过xmlhttp对象传递到后台Q后台在接收到请求后Q将需要的l果Q再传回到前収ͼq样可以实C需要页面的回发Q页是数据实现来回传递,从页实现无刷新?nbsp;Ajax的原理简单来_实际上就是通过XmlHttpRequest对象来向服务器发异步hQ从服务器获得数据,然后用javascript来操作DOM而更新页面?nbsp; q其中最关键的一步就是从服务器获得请求数据。要清楚q个q程和原理,我们必须?XMLHttpRequest有所了解?nbsp; 我们可以看出QXMLHttpRequest对象完全用来向服务器发出一个请求的Q它的作用也局限于此,但它的作用是整个ajax实现的关键,我们可以把服务器端看成一个数据接口,它返回的是一个纯文本,当然Q这个文本流可以是XML格式Q可以是HtmlQ可以是Javascript代码Q也可以只是一个字W串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端文本的l果写入面Q这和普通的web开发流E是一LQ不同的是,客户端在异步获取q个l果后,不是直接昄在页面,而是先由javascript来处理,然后再显C在面?/span> ]]> 内外左右q接定义 http://www.aygfsteel.com/dongisland/archive/2014/03/05/410631.htmldongisland dongisland Wed, 05 Mar 2014 03:26:00 GMT http://www.aygfsteel.com/dongisland/archive/2014/03/05/410631.html http://www.aygfsteel.com/dongisland/comments/410631.html http://www.aygfsteel.com/dongisland/archive/2014/03/05/410631.html#Feedback 0 http://www.aygfsteel.com/dongisland/comments/commentRss/410631.html http://www.aygfsteel.com/dongisland/services/trackbacks/410631.html 内连接:INNER JOIN或者JOINQ把两个表中数据对应的数据查出来?nbsp;外连接:OUTER JOINQ以某个表ؓ基础把对应数据查出来Q分为左外连接和叛_q接?nbsp; 左外q接QLEFT JOIN或者LEFT OUTER JOINQ以某个表ؓ基础把对应数据查出来?nbsp; 叛_q接QRIGHT JOIN或者RIGHT OUTER JOINQ以某个表ؓ基础把对应数据查出来?nbsp; 全连接:FULL JOINQ以多个表ؓ基础 例子Q? a? id name 1 ? 2 李四 3 王武 b? id job parent_id 1 23 1 2 34 2 3 34 4 a.id同b.parent_id 存在 关系 内连?/span> select a.*,b.* from a inner join b on a.id=b.parent_id l果? 1 ? 1 23 1 2 李四 2 34 2 左连?/span> select a.*,b.* from a left join b on a.id=b.parent_id l果? 1 ? 1 23 1 2 李四 2 34 2 3 王武 null 双?nbsp; select a.*,b.* from a right join b on a.id=b.parent_id l果? 1 ? 1 23 1 2 李四 2 34 2 null 3 34 4 完全q接 select a.*,b.* from a full join b on a.id=b.parent_id l果? 1 ? 1 23 1 2 李四 2 34 2 null 3 34 4 3 王武 null ]]> 谈JAVA集合 Map List Set{java集合c?/title> http://www.aygfsteel.com/dongisland/archive/2014/03/05/410628.htmldongisland dongisland Wed, 05 Mar 2014 03:07:00 GMT http://www.aygfsteel.com/dongisland/archive/2014/03/05/410628.html http://www.aygfsteel.com/dongisland/comments/410628.html http://www.aygfsteel.com/dongisland/archive/2014/03/05/410628.html#Feedback 0 http://www.aygfsteel.com/dongisland/comments/commentRss/410628.html http://www.aygfsteel.com/dongisland/services/trackbacks/410628.html 一、CollectionscdCollection接口
Collections 是针寚w合类的一个帮助类Q他提供一pd静态方法实现对各种集合的搜索、排序、线E安全化{操作?/span>
Collection是最基本的集合接口,一个Collection代表一lObjectQ即Collection的元素(ElementsQ。一?Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接承自Collection?c,Java SDK提供的类都是l承自Collection?#8220;子接?#8221;如List和Set?/span>
二、现在来谈谈Java集合的一些实现类?/strong>
Collection ├ List
│ ├ ArreyList
│ ├ Vector
│ ├ LinkedList
│└Stack
└Set
│ ├ HashSet │ ├ LinkedHashSet
│└ TreeSet
List代表有序、重复的集合
1.ArrayListc?/span> ArrayList实现了可变大的数组。它允许所有元素,包括null。ArrayList没有同步?/span>sizeQisEmptyQgetQsetҎq行旉为常数。但是addҎ开销为分摊的常数Q添加n个元素需要O(n)的时间。其他的Ҏq行旉为线性?/span> 每个ArrayList实例都有一个容量(CapacityQ,即用于存储元素的数组的大。这个容量可随着不断d新元素而自动增加,但是增长法 q没有定义。当需要插入大量元素时Q在插入前可以调用ensureCapacityҎ来增加ArrayList的容量以提高插入效率?/span> 和LinkedList一PArrayList也是非同步的QunsynchronizedQ?/span>
2.Vectorc?/span> Vector非常cMArrayListQ但是Vector是同步的。由Vector创徏的IteratorQ虽然和ArrayList创徏的Iterator是同一接口Q但是,因ؓVector是同步的Q当一个Iterator被创且正在被用,另一个线E改变了Vector的状态(例如Q添加或删除了一些元素)Q这时调用Iterator的方法时抛出ConcurrentModificationExceptionQ因此必L莯异常?/span>
3.LinkedListc?/span> LinkedList实现了List接口Q允许null元素。此外LinkedList提供额外的getQremoveQinsertҎ?LinkedList的首部或N。这些操作LinkedList可被用作堆栈QstackQ,队列QqueueQ或双向队列QdequeQ?/span> 注意LinkedList没有同步Ҏ。如果多个线E同时访问一个ListQ则必须自己实现讉K同步。一U解x法是在创建List时构造一个同步的ListQ?/span> List list = Collections.synchronizedList(new LinkedList(...));
4.Stack c?/span> Stackl承自VectorQ实C个后q先出的堆栈。Stack提供5个额外的Ҏ使得Vector得以被当作堆栈用。基本的push和popҎQ还有peekҎ得到栈顶的元素,emptyҎ试堆栈是否为空QsearchҎ一个元素在堆栈中的位置。Stack刚创建后是空栈?/span>
Set代表无序、不可重复的集合 HashSet和TreeSet的区?/strong> HashSet无序QTreeSet有序Q两者均不能有重复的对象
Map ├ HashMap
├ Hashtable
├ TreeMap └WeakHashMap
Map没有l承Collection接口
1.Hashtablec?/span> Hashtablel承Map接口Q实C个key-value映射的哈希表。Q何非I(non-nullQ的对象都可作ؓkey或者value?/span>Hashtable是同步的?/span>
2.HashMapc?/span> HashMap和HashtablecMQ不同之处在?HashMap是非同步的,q且允许nullQ即null value和null key。,但是HashMap视ؓCollection?Qvalues()Ҏ可返回CollectionQ,其P代子操作旉开销和HashMap的容量成比例。因此,如果q代操作的性能相当重要的话Q不?HashMap的初始化定w讑־q高Q或者load factorq低?/span>3.WeakHashMapc?/span> WeakHashMap是一U改q的HashMapQ它对key实行“弱引?#8221;Q如果一个key不再被外部所引用Q那么该key可以被GC回收?/span>
三、集合类的遍?/strong>
遍历通用Collection
Iterator it = collection.iterator(); // 获得一个P代子 while(it.hasNext()) { Object obj = it.next(); // 得到下一个元?/span>}
]]>Struts1与Struts2的区?/title> http://www.aygfsteel.com/dongisland/archive/2014/03/05/410627.htmldongisland dongisland Wed, 05 Mar 2014 02:52:00 GMT http://www.aygfsteel.com/dongisland/archive/2014/03/05/410627.html http://www.aygfsteel.com/dongisland/comments/410627.html http://www.aygfsteel.com/dongisland/archive/2014/03/05/410627.html#Feedback 0 http://www.aygfsteel.com/dongisland/comments/commentRss/410627.html http://www.aygfsteel.com/dongisland/services/trackbacks/410627.html 1) 在Action实现cL面的ҎQStruts 1要求Actioncȝ承一个抽象基c;Struts 1的一个具体问题是使用抽象cȝE而不是接口。Struts 2 Actioncd以实C个Action接口Q也可以实现其他接口Q可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类d现常用的接口。即使Action接口不是必须实现的,只有一个包含executeҎ的POJOc都可以用作Struts 2的Action?nbsp;2) U程模式斚w的对比:Struts 1 Action是单例模式ƈ且必LU程安全的,因ؓ仅有Action的一个实例来处理所有的h。单例策略限制了Struts 1 Action能做的事Qƈ且要在开发时特别心。Action资源必须是线E安全的或同步的QStruts 2 Action对象为每一个请求生一个实例,因此没有U程安全问题?即struts1每个action只有1个实例,struts2每一个请求都会new一个实例,所以struts2是线E安全的 3) Servlet依赖斚w的对比:Struts 1 Action依赖于Servlet APIQ因为Struts 1 Action的executeҎ中有HttpServletRequest和HttpServletResponseҎ。Struts 2 Action不再依赖于Servlet APIQ从而允许ActionqWeb容器q行Q从而降低了试Action的难度?当然Q如果Action需要直接访问HttpServletRequest和HttpServletResponse参数QStruts 2 Action仍然可以讉K它们。但是,大部分时候,Action都无需直接讉KHttpServetRequest和HttpServletResponseQ从而给开发者更多灵zȝ选择?nbsp; 4) 可测性方面的ҎQ测试Struts 1 Action的一个主要问题是executeҎ依赖于Servlet APIQ这使得Action的测试要依赖于Web容器。ؓ了脱Web容器试Struts 1的ActionQ必d助于第三方扩展QStruts TestCaseQ该扩展下包含了pd的Mock对象Q模拟了HttpServetRequest和HttpServletResponse对象Q,从而可以脱Web容器试Struts 1的ActioncRStruts 2 Action可以通过初始化、设|属性、调用方法来试?nbsp; 5) 装h参数的对比:Struts 1使用ActionForm对象装用户的请求参敎ͼ所有的ActionForm必须l承一个基c:ActionForm。普通的JavaBean不能用作ActionFormQ因此,开发者必d建大量的ActionFormcd装用戯求参数。虽然Struts 1提供了动态ActionForm来简化ActionForm的开发,但依焉要在配置文g中定义ActionFormQStruts 2直接使用Action属性来装用户h属性,避免了开发者需要大量开发ActionFormcȝ烦琐Q实际上Q这些属性还可以是包含子属性的Rich对象cd。如果开发者依然怀念Struts 1 ActionForm的模式,Struts 2提供了ModelDriven模式Q可以让开发者用单独的Model对象来封装用戯求参敎ͼ但该Model对象无需l承MStruts 2基类Q是一个POJOQ从而降低了代码污染?nbsp; 6) 表达式语a斚w的对比:Struts 1整合了JSTLQ因此可以用JSTL表达式语a。这U表辑ּ语言有基本对象图遍历Q但在对集合和烦引属性的支持上则功能不强QStruts 2可以使用JSTLQ但它整合了一U更强大和灵zȝ表达式语aQOGNLQObject Graph Notation LanguageQ,因此QStruts 2下的表达式语a功能更加强大?nbsp; 7) — l定值到视图的对比:Struts 1使用标准JSP机制把对象绑定到视图面QStruts 2使用“ValueStack”技术,使标{ֺ能够讉K|而不需要把对象和视N面绑定在一赗?nbsp; 8) cd转换的对比:Struts 1 ActionForm 属性通常都是Stringcd。Struts 1使用Commons-Beanutilsq行cd转换Q每个类一个{换器Q{换器是不可配|的QStruts 2使用OGNLq行cd转换Q支持基本数据类型和常用对象之间的{换?nbsp; 9) 数据校验的对比:Struts 1支持在ActionForm重写validateҎ中手动校验,或者通过整合Commons alidator框架来完成数据校验。Struts 2支持通过重写validateҎq行校验Q也支持整合XWork校验框架q行校验?nbsp; 10) Action执行控制的对比:Struts 1支持每一个模块对应一个请求处理(即生命周期的概念Q,但是模块中的所有Action必须׃n相同的生命周期。Struts 2支持通过拦截器堆栈(Interceptor StacksQؓ每一个Action创徏不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起用?nbsp; 11) 捕获输入QStruts1 使用ActionForm对象捕获输入。所有的ActionForm必须l承一个基cR因为其他JavaBean不能用作ActionFormQ开发者经常创建多余的cL莯入。动态BeanQDynaBeansQ可以作为创ZlActionForm的选择Q但是,开发者可能是在重新描q?创徏)已经存在的JavaBeanQ仍然会D有冗余的javabeanQ。Struts 2直接使用Action属性作入属性,消除了对W二个输入对象的需求。输入属性可能是有自??属性的rich对象cd。Action属性能够通过 web面上的taglibs讉K。Struts2也支持ActionForm模式。rich对象cdQ包括业务对象,能够用作输入/输出对象。这U?ModelDriven Ҏ简化了taglib对POJO输入对象的引用?/span> ]]>
վ֩ģ壺
¡ |
|
|
Ȫ |
ɽ |
|
Զ |
|
|
|
|
|
ɽ |
|
|
ˮ |
|
|
» |
|
|
¡ |
|
|
|
|
̩ |
|
Ȫ |
J |
¤ |
|
찲 |
|
|
ξ |
ʢ |
|
|
ƽ |
ԭ |