锁定老帖子 主题:一道JAVA面试题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-18
最后修改:2010-10-18
题目:一列整型数组,从第一个开始,累加后续两个数字,得到一个新的数组,然后判断新的数组中的最大值,从而得到这个最大值是原始数组中哪三个数字累加的,输出(打印)这三个数字,并且输出(打印)出这个最大值。 如:2,5,-6,12,7,15,6,-10 结果应该是输出:12,7,15 最大值: 34
我的思路1: 1.先统计处累加的数组,数组长度是原始数组长度-2 2.计算新数组的最大值 3.根据最大值的位置输出原始数组的三个数字 4。输出最大值
思路2(如果可以打乱原始数组的次序): 1。先冒泡排序一次,从小到大排序 2。计算最后三个数字的值,得到结果
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-10-18
scholers 写道 题目:一列整型数组,从第一个开始,累加后续两个数字,得到一个新的数组,然后判断新的数组中的最大值,从而得到这个最大值是原始数组中哪三个数字累加的,输出(打印)这三个数字,并且输出(打印)出这个最大值。 如:2,5,-6,12,7,15,6,-10 结果应该是输出:12,7,15 最大值: 34
我的思路1: 1.先统计处累加的数组,数组长度是原始数组长度-2 2.计算新数组的最大值 3.根据最大值的位置输出原始数组的三个数字 4。输出最大值
思路2(如果可以打乱原始数组的次序): 1。先冒泡排序一次,从小到大排序 2。计算最后三个数字的值,得到结果
一次遍历,记下最大的累加值和下标就行了 |
|
返回顶楼 | |
发表时间:2010-10-19
scholers 写道
题目:一列整型数组,从第一个开始,累加后续两个数字,得到一个新的数组,然后判断新的数组中的最大值,从而得到这个最大值是原始数组中哪三个数字累加的,输出(打印)这三个数字,并且输出(打印)出这个最大值。 如:2,5,-6,12,7,15,6,-10 结果应该是输出:12,7,15 最大值: 34
我的思路1: 1.先统计处累加的数组,数组长度是原始数组长度-2 2.计算新数组的最大值 3.根据最大值的位置输出原始数组的三个数字 4。输出最大值
思路2(如果可以打乱原始数组的次序): 1。先冒泡排序一次,从小到大排序 2。计算最后三个数字的值,得到结果
思路2不符合题意。 |
|
返回顶楼 | |
发表时间:2010-10-19
asme2u 写道
scholers 写道
题目:一列整型数组,从第一个开始,累加后续两个数字,得到一个新的数组,然后判断新的数组中的最大值,从而得到这个最大值是原始数组中哪三个数字累加的,输出(打印)这三个数字,并且输出(打印)出这个最大值。 如:2,5,-6,12,7,15,6,-10 结果应该是输出:12,7,15 最大值: 34
我的思路1: 1.先统计处累加的数组,数组长度是原始数组长度-2 2.计算新数组的最大值 3.根据最大值的位置输出原始数组的三个数字 4。输出最大值
思路2(如果可以打乱原始数组的次序): 1。先冒泡排序一次,从小到大排序 2。计算最后三个数字的值,得到结果
一次遍历,记下最大的累加值和下标就行了
这位兄弟说的很好,关键值就是最大的累加值和下标了。 |
|
返回顶楼 | |
发表时间:2010-10-19
Kisses99 写道
scholers 写道
题目:一列整型数组,从第一个开始,累加后续两个数字,得到一个新的数组,然后判断新的数组中的最大值,从而得到这个最大值是原始数组中哪三个数字累加的,输出(打印)这三个数字,并且输出(打印)出这个最大值。 如:2,5,-6,12,7,15,6,-10 结果应该是输出:12,7,15 最大值: 34
我的思路1: 1.先统计处累加的数组,数组长度是原始数组长度-2 2.计算新数组的最大值 3.根据最大值的位置输出原始数组的三个数字 4。输出最大值
思路2(如果可以打乱原始数组的次序): 1。先冒泡排序一次,从小到大排序 2。计算最后三个数字的值,得到结果
思路2不符合题意。
后来想了一下,思路2确实不符合题意 |
|
返回顶楼 | |
发表时间:2010-10-19
最后修改:2010-10-19
scholers 写道
Kisses99 写道
scholers 写道
题目:一列整型数组,从第一个开始,累加后续两个数字,得到一个新的数组,然后判断新的数组中的最大值,从而得到这个最大值是原始数组中哪三个数字累加的,输出(打印)这三个数字,并且输出(打印)出这个最大值。 如:2,5,-6,12,7,15,6,-10 结果应该是输出:12,7,15 最大值: 34
我的思路1: 1.先统计处累加的数组,数组长度是原始数组长度-2 2.计算新数组的最大值 3.根据最大值的位置输出原始数组的三个数字 4。输出最大值
思路2(如果可以打乱原始数组的次序): 1。先冒泡排序一次,从小到大排序 2。计算最后三个数字的值,得到结果
思路2不符合题意。
后来想了一下,思路2确实不符合题意
max = 0 for i = 0->n-2 sum = a(i) + a(i + 1) + a(i + 2) if(sum > max) index = i max = sum end if end for print a(index),a(index+1),a(index+2) print max |
|
返回顶楼 | |
发表时间:2010-10-19
感觉这题变简单了,
以前的题目是一列整型数组,找出最大的连续和值和起始下标 例子:4,-7,6,-10,-3,3,2 答案为:6,下标是2(以0开始) |
|
返回顶楼 | |
发表时间:2010-10-19
kimmking 写道
scholers 写道
Kisses99 写道
scholers 写道
题目:一列整型数组,从第一个开始,累加后续两个数字,得到一个新的数组,然后判断新的数组中的最大值,从而得到这个最大值是原始数组中哪三个数字累加的,输出(打印)这三个数字,并且输出(打印)出这个最大值。 如:2,5,-6,12,7,15,6,-10 结果应该是输出:12,7,15 最大值: 34
我的思路1: 1.先统计处累加的数组,数组长度是原始数组长度-2 2.计算新数组的最大值 3.根据最大值的位置输出原始数组的三个数字 4。输出最大值
思路2(如果可以打乱原始数组的次序): 1。先冒泡排序一次,从小到大排序 2。计算最后三个数字的值,得到结果
思路2不符合题意。
后来想了一下,思路2确实不符合题意
max = 0 for i = 0->n-2 sum = a(i) + a(i + 1) + a(i + 2) if(sum > max) index = i max = sum end if end for print a(index),a(index+1),a(index+2) print max
很简单的解决方法! |
|
返回顶楼 | |
发表时间:2010-10-19
最后修改:2010-10-19
还算比较简单: public void toPrintMax(int[] oldArray){ String str=oldArray[0]+","+oldArray[1]+","+oldArray[2]; int max=oldArray[0]+oldArray[1]+oldArray[2]; for(int i=1;i<oldArray.length-2;i++){ if(oldArray[i]+oldArray[i+1]+oldArray[i+2]>max){ max=oldArray[i]+oldArray[i+1]+oldArray[i+2]; str=oldArray[i]+","+oldArray[i+1]+","+oldArray[i+2]; } } System.out.println(str); System.out.println(max); }
|
|
返回顶楼 | |
发表时间:2010-10-19
lyw985 写道 感觉这题变简单了,
以前的题目是一列整型数组,找出最大的连续和值和起始下标 例子:4,-7,6,-10,-3,3,2 答案为:6,下标是2(以0开始) import java.util.Hashtable; import java.util.Map; public class Test { public static void main(String[] args) { System.out.println(calcMaxSum(new int[] { 9, -11, 2, 3, 4, -10, 6, 3 })); System.out.println(calcMaxSum(new int[] { 2, -3, 1, 10, -6, -3 })); System.out.println(calcMaxSum(new int[] { 4, -3, 1, 10, -6, -3 })); System.out.println(calcMaxSum(new int[] { 3, -3, 1, 10, -6, -3 })); System.out.println(calcMaxSum(new int[] { 2, -3, 1, 10, -6, 7 })); } /** * 返回值的 key 数组index ,value 为连续的数量(包括自身) * * @param ns * @return */ public static Map<Integer, Integer> calcMaxSum(int[] ns) { Map<Integer, Integer> map = new Hashtable<Integer, Integer>(); // 最大连续和值(未考虑 int 型求和溢出问题) int maxSum = ns[ns.length - 1]; // 向索引增大方向所能取得的最大连续和值 int seriesSum = 0; // 向索引增大方向所能取得最大连续和值时,的最大索引 int endIndex = ns.length - 1; for (int i = ns.length - 1; i >= 0; i--) { if (seriesSum > 0) { seriesSum += ns[i]; } else { seriesSum = ns[i]; endIndex = i; } if (seriesSum > maxSum) { maxSum = seriesSum; map.clear(); map.put(i, endIndex - i + 1); } else if (seriesSum == maxSum) { map.put(i, endIndex - i + 1); } } return map; } } |
|
返回顶楼 | |