科大讯飞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);
}
}
```
全部评论
相关推荐
点赞 评论 收藏
分享
06-23 12:08
广州大学 硬件测试 小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
06-01 21:54
湖南科技大学 嵌入式软件工程师 点赞 评论 收藏
分享