您的位置:首页 > 汽车 > 新车 > 作业帮笔试1【简单版接雨水】

作业帮笔试1【简单版接雨水】

2024/10/19 16:31:07 来源:https://blog.csdn.net/qq_43954910/article/details/140387549  浏览:    关键词:作业帮笔试1【简单版接雨水】

已经做过接雨水的题解,本题略有不同,描述是给定一个数组,每个值代表对应坐标的高度,从中选择两个坐标,与x轴组成的容器能接最多的水。

输入是字符串形式【1,2,3】需要自己转换成数组。

算法:使用双指针从两边选取,哪一边坐标低哪一边移动。每次计算结果与最大值对比。

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine(); // 读取一行输入// 去除首尾的方括号input = input.substring(1, input.length() - 1);// 使用正则表达式来找到所有的数字Pattern pattern = Pattern.compile("\\d+");Matcher matcher = pattern.matcher(input);ArrayList<Integer> list = new ArrayList<>();while (matcher.find()) {// 将匹配到的数字字符串转换为整数并添加到列表中list.add(Integer.parseInt(matcher.group()));}// 将ArrayList转换为数组int[] array = list.stream().mapToInt(i -> i).toArray();Integer[] array = list.toArray(new Integer[0]); // 自动分配新数组// // 输出转换后的数组// for (int i = 0; i < array.length; i++) {//     System.out.print(array[i]);//     if (i < array.length - 1) {//         System.out.print(", ");//     }// }System.out.println(maxArea(array));}public static int maxArea(Integer[] height) {int maxWater = 0;int left = 0;int right = height.length - 1;while (left < right) {int currentWater = Math.min(height[left], height[right]) * (right - left);maxWater = Math.max(maxWater, currentWater);if (height[left] < height[right]) {left++;} else {right--;}}return maxWater;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com