Java实现:一个整数数组作为参数,返回一个新的整数数组,其中每个元素表示原数组中该位置后面第一个比它大的数,如果没有则为 -1
时间: 2023-09-17 12:06:03 浏览: 98
java代码-使用java输入参数为一个整数,输出为该整数各个位上的最大数字的源代码
5星 · 资源好评率100%
### 回答1:
以下是 Java 实现代码:
public static int[] nextGreaterElement(int[] nums) {
int[] result = new int[nums.length];
Stack<Integer> stack = new Stack<>();
for (int i = nums.length - 1; i >= 0; i--) {
while (!stack.isEmpty() && nums[i] >= stack.peek()) {
stack.pop();
}
result[i] = stack.isEmpty() ? -1 : stack.peek();
stack.push(nums[i]);
}
return result;
}
这个函数的时间复杂度是 O(n),其中 n 是数组的长度。
### 回答2:
可以通过遍历整数数组来实现这个功能。具体步骤如下:
1. 创建一个新的整数数组result,长度与原数组相同。
2. 从第一个元素开始,遍历原数组。
3. 对于每个元素arr[i],通过遍历i之后的元素来找到第一个比它大的数。
3.1 若找到比arr[i]大的数,则将该数赋值给result[i]。
3.2 若遍历完i之后的元素仍未找到比arr[i]大的数,则将-1赋值给result[i]。
4. 返回新的整数数组result。
以下是一个Java实现的示例代码:
```java
public class Main {
public static int[] findNextGreater(int[] arr) {
int[] result = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
int nextGreater = -1; // 默认为-1
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] > arr[i]) {
nextGreater = arr[j];
break;
}
}
result[i] = nextGreater;
}
return result;
}
public static void main(String[] args) {
int[] arr = {3, 1, 5, 2, 4};
int[] result = findNextGreater(arr);
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + " ");
}
}
}
```
输出结果为:5 5 -1 4 -1。
以上代码中,我们通过嵌套的两个循环,在每一次外层循环中遍历每个元素之后的元素,找到第一个比当前元素大的数,并将其赋值给新的数组result对应位置。如果未找到比当前元素大的数,则将-1赋值给result对应位置。
### 回答3:
Java实现这个功能可以使用堆栈来解决。
算法的基本思路如下:
1. 创建一个整数数组`result`,用来存储结果,数组长度和输入的整数数组`nums`长度相同,初始化为全-1。
2. 创建一个空的堆栈`stack`,用来存储整数数组`nums`中的元素索引。
3. 遍历整数数组`nums`,对于每个元素`num`和对应的索引`index`,执行以下操作:
- 如果堆栈不为空,并且堆栈顶部元素指向的值小于`num`,则将堆栈顶部元素出栈,该元素的结果为`num`,将结果存储在`result`的对应位置。
- 将当前元素`num`的索引`index`入栈。
4. 返回结果数组`result`。
下面是对应的Java代码实现:
```java
import java.util.Arrays;
import java.util.Stack;
public class NextGreaterElement {
public static int[] nextGreaterElement(int[] nums) {
int[] result = new int[nums.length];
Arrays.fill(result, -1);
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < nums.length; i++) {
while (!stack.isEmpty() && nums[stack.peek()] < nums[i]) {
result[stack.pop()] = nums[i];
}
stack.push(i);
}
return result;
}
public static void main(String[] args) {
int[] nums = {2, 5, 9, 3, 1, 12, 6, 8, 7};
int[] result = nextGreaterElement(nums);
System.out.println(Arrays.toString(result));
}
}
```
这个实现的时间复杂度为O(n),其中n是整数数组`nums`的长度。
阅读全文