计算一组整数的连续子序列和的最大值
2017-08-20 19:42
183 查看
1、针对一维数组
思路:使用动态规划方法
算法说明:
设f(n)表示以a
为子序列最后一个元素的最大和,则可以有下面的规则:
(1)当f(n-1)<0时,f(n)=a
;
(2)当n!=0且f(n-1)>0时,f(n)=f(n-1)+a
算法实现
2、针对矩阵(二维数组)
目标:计算矩阵的2*2子集和的最大值
动态规划思路是否适用:可以
动态规划思路实现:还没想好,待完善…..
先采用比较粗暴的遍历方式实现目标
遍历思路算法实现
思路:使用动态规划方法
算法说明:
设f(n)表示以a
为子序列最后一个元素的最大和,则可以有下面的规则:
(1)当f(n-1)<0时,f(n)=a
;
(2)当n!=0且f(n-1)>0时,f(n)=f(n-1)+a
算法实现
/** * 有一串整数,有正有负,计算连续子序列和的最大值 * 规律总结 * (1)如果n=0,则f(n)=a[0] * (2)如果f(n-1)<0,则f(n)=a * (3)如果f(n-1)>0,则f(n)=f(n-1)+a * @param args */ public static void main(String[] args) { final int[] iArr = new int[]{-5,6,-1,9,-10,20}; iArr[0] = -100; int max = 0; for(int i=0;i<iArr.length;i++){ System.out.println(getMax(iArr,i)); if(getMax(iArr,i) > max){ max = getMax(iArr,i); } } System.out.println("max=" + max); } public static int getMax(int[] iArr,final int n){ if(n == 0) return iArr[0]; if(getMax(iArr,n-1) < 0) return iArr ; else{ return getMax(iArr,n-1)+iArr ; } }
2、针对矩阵(二维数组)
目标:计算矩阵的2*2子集和的最大值
动态规划思路是否适用:可以
动态规划思路实现:还没想好,待完善…..
先采用比较粗暴的遍历方式实现目标
遍历思路算法实现
/** * (1)不使用动态规划思路 * (2)每次扫描iArr[i][j]和iArr[i+1][j],并将结果保存下来,作为下次扫描计算的基础 * (3)尽量不要重复扫描元素 * (4)注意考虑到“换行”的情况 * @param args */ public static void main(String[] args) { int[][] iArr = new int[][]{{1,2,3,100},{300,6,7,200},{400,10,11,12}}; int max = 0; int last_max = 0; System.out.println("--------------------"); // 扫描法 // 计算2*2子矩阵的最大和 for(int i=0;i<iArr.length-1;i++){ last_max = 0; // 注意换行时,清空上一行的计算结果 for(int j=0;j<iArr[0].length;j++){ int temp = iArr[i][j] + iArr[i+1][j]; int maxTemp = last_max + temp; if(maxTemp > max){ max = maxTemp; } last_max = temp; System.out.println("last_max=" + last_max + "; max="+max); } } System.out.println("max is :" + max); }
相关文章推荐
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 【C语言】输入一组整数,求出这组数字子序列和中最大值
- 输入一组大于等于0的整数,根据从大到小的顺序排序后输出;如果排序后有连续数时,只输出连续输的最大和最小数。
- 【C语言】输入一组整数,求出这组数字子序列和中最大值
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 计算一组整数的最大值和最小值----静态内部类的使用
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 整数表示为最大子序列与整数表示为连续子序列
- 编写一个PHP函数。求任意n个正负整数里面最大的连续和,要求算法时间复杂度尽可能低。
- 计算两个整数的最大公约数
- 【Leetcode】寻找数串中连续最大整数和且最大长度的子串