科大讯飞08.18【编程】
【记录一下】
第一题:打印倒金字塔
第二题:栈操作进行数字合并。
第三题:区间拓展,一个长度为n的数组,从x位置出发,初始区间是[x,x],可以向左或向右拓展,得分即区间内元素的和,但是要求只有在要拓展的元素比当前得分大的时候才可以拓展。出来之后看大家的提示才知道是dfs。
```java
public class Solution {
public int[] findMax(int[] arr){
int[] res = new int[arr.length];
for(int i = 0; i < arr.length; i++){
res[i] = dfs(arr, i, 0);
}
return res;
}
public int dfs(int[] arr, int s, int sum){
// arr从s位置开始扩展能获得的最大得分
if(s < 0 || s >= arr.length) return sum;
sum += arr[s];
int left = sum, right = sum;
if(s > 0 && arr[s - 1] > sum){
left = dfs(arr, s - 1, sum);
}
if(s < arr.length - 1 && arr[s + 1] > sum){
right = dfs(arr, s + 1, sum);
}
return Math.max(left, right);
}
}
```
第一题:打印倒金字塔
第二题:栈操作进行数字合并。
第三题:区间拓展,一个长度为n的数组,从x位置出发,初始区间是[x,x],可以向左或向右拓展,得分即区间内元素的和,但是要求只有在要拓展的元素比当前得分大的时候才可以拓展。出来之后看大家的提示才知道是dfs。
```java
public class Solution {
public int[] findMax(int[] arr){
int[] res = new int[arr.length];
for(int i = 0; i < arr.length; i++){
res[i] = dfs(arr, i, 0);
}
return res;
}
public int dfs(int[] arr, int s, int sum){
// arr从s位置开始扩展能获得的最大得分
if(s < 0 || s >= arr.length) return sum;
sum += arr[s];
int left = sum, right = sum;
if(s > 0 && arr[s - 1] > sum){
left = dfs(arr, s - 1, sum);
}
if(s < arr.length - 1 && arr[s + 1] > sum){
right = dfs(arr, s + 1, sum);
}
return Math.max(left, right);
}
}
```
全部评论
相关推荐
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java 点赞 评论 收藏
分享
04-25 21:06
门头沟学院 后端 点赞 评论 收藏
分享
点赞 评论 收藏
分享