华为2016年机试题 第三题详解
2016-09-28 13:40
246 查看
题目记得不太清了,大概意思是:一个数组,都是正整数,最多连续取两个,求如何取取得的数相加和最大。
这是一个比较基础的动态规划问题,可以按照常规的状态递推思路。 开辟数组data[3], 令data[0]
表示数组arr中第n个数不选,data[1]
表示数组arr中第n个数选,第n-1个数不选,data[2]
表示第n和第n-1个数选了。这类问题主要推导出迁移公式就好做了,见代码:
java 代码如下:
public class HWPro3 {
public static void main(String arg[]){
int[] data = {1,9,1,9,9,9,9};
System.out.println(maxValue(data));
}
public static int maxValue(int[] data){
int N = data.length;
if(N<=2){
return (N==1)?data[0]:(data[0]+data[1]);
}
int[][] arr = new int
[3];
arr[1][0] = data[0];
arr[1][1] = data[1];
arr[1][2] = data[0]+data[1];
for (int i = 2; i < N; i++) {
//状态迁移公式,动态规划核心部分
arr[i][0] = max(arr[i-1][0], arr[i-1][1], arr[i-1][2]); //第i个数不选时
arr[i][1] = arr[i-1][0]+data[i]; //第i个数选,第i-1个数不选时
arr[i][2] = arr[i-1][1]+data[i]; //第i个数选,第i-1个数也选时
}
return max(arr[N-1][0], arr[N-1][1],arr[N-1][2]);
}
public static int max(int a, int b){
return a>b?a:b;
}
public static int max(int a,int b,int c){
return a>b&&a>c?a:(b>c?b:c);
}
}
相关文章推荐
- 2015届华为校园招聘机试题<第三题等式变换>
- 2016年华为上机考试试题答案
- 详解华为笔试试题之双向循环链表题
- 等式变换(2015届华为校园招聘机试题第三题 )
- 2016年华为秋招机试题——3.整数排序(300分)
- 2016年华为秋招机试题——2.字符串排序(200分)
- 2017年华为Fx计划在线机试题(详解)
- 华为机试题第三题
- 2016年华为秋招机试题——1.回文数字判断(100分)
- 2016年华为机试题(贪心算法)
- 2016年华为网络技术精英大赛复赛试题
- 2016年华为校招机试题
- 2011华为校园招聘重庆试题第三题
- 2016年Linux兴趣小组免试题Level_5及Level_End详解
- 2016年华为机试题
- “英特尔杯”全国计算机多核程序设计大赛复赛试题-第三题
- 详解华为java华为面试题(转自suningin,个人补充了部分题目参考答案)
- 华为Display interface的显示信息详解
- 华为3com交换路由命令详解
- 华为3com交换路由命令详解