请写Java代码。【题目描述】一个数组,取中间连续的一段,我们称为“区间”,请编写程序找到和为最大的那一段区间,并输出这个区间和【输入格式】:从键盘输入一个正整数n,表示数组的长度接下来一行输入n个整数,以空格隔开,请将这n个数保存到一个长度为n的数组中【输出格式】:输出一个整数,表示输入数组的最大区间和
时间: 2023-04-06 11:04:45 浏览: 98
以下是Java代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
}
int maxSum = nums[0];
int curSum = nums[0];
for (int i = 1; i < n; i++) {
curSum = Math.max(curSum + nums[i], nums[i]);
maxSum = Math.max(maxSum, curSum);
}
System.out.println(maxSum);
}
}
输入格式为:首先输入一个正整数n,表示数组的长度,接下来一行输入n个整数,以空格隔开,将这n个数保存到一个长度为n的数组中。输出格式为:输出一个整数,表示输入数组的最大区间和。
这段代码实现了找到和为最大的连续区间的功能,使用了动态规划的思想。
相关问题
能否提供一些常见的Java面试笔试题目以及它们对应的最佳答案或者解题思路?
Java面试中常遇到的问题涵盖了基础语法、数据结构、集合框架、异常处理、设计模式等多个方面。这里列出几个常见的题目及简要解答:
1. **数组越界异常(ArrayIndexOutOfBoundsException)**: 提问者可能会让你编写一段代码,然后故意访问数组边界之外的元素。最佳答案会强调检查索引并确保其在有效范围内。
示例代码(错误版本):
```java
int[] array = new int[5];
System.out.println(array[5]); // 这将抛出ArrayIndexOutOfBoundsException
```
解题思路:使用`if`条件检查索引,或者使用`Collections`类提供的安全版本如`Arrays.copyOfRange()`。
2. **字符串反转**:
题目:如何不用额外空间反转一个字符串?
最佳答案:可以使用双指针法,一个从头开始,一个从尾部开始,交换字符直到相遇。
```java
public String reverseString(String s) {
char[] chars = s.toCharArray();
int start = 0;
int end = chars.length - 1;
while (start < end) {
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
return new String(chars);
}
```
3. **二分查找算法**:
要求实现一个支持范围查找的二分查找函数。
答案:首先计算两个搜索边界的交点,如果该点包含目标区间,则进行常规的二分查找;否则,在左半部分或右半部分继续二分查找。
4. **设计模式问题**:
如“解释单例模式”。最佳答案会包括单例模式的目的、特点(保证只有一个实例)、如何防止多线程下的多次初始化等。
阅读全文