线程 "main" java.lang.IndexOutOfBoundsException 中的异常:索引:8,大小:0 在 java.util.ArrayList.rangeCheckForAdd(ArrayList.java:665)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 8, Size: 0 at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:665)
我正在尝试解决一个问题,该问题表述为 -> 给定数组 A,为数组中的每个元素 A[i] 找到下一个更大的元素 G[i]。元素 A[i] 的下一个更大的元素是数组 A 中 A[i] 右侧的第一个更大的元素。没有更大元素的元素,将下一个更大的元素视为 -1.
public class Solution {
public ArrayList<Integer> nextGreater(ArrayList<Integer> A) {
Stack<Integer> stk = new Stack<>();
if (A.size() == 1)
{
ArrayList<Integer> ans= new ArrayList<>();
ans.add(0,-1);
return ans;
}
ArrayList<Integer> ans= new ArrayList<>(A.size());
ans.add(A.size()-1,-1); //error ->Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 8, Size: 0
stk.push(0);
for(int i=1;i<A.size()-1;i++){
while(!stk.isEmpty()&&A.get(i)>A.get(stk.peek())){
ans.add(stk.pop(),A.get(i));
// stk.pop();
}
stk.push(i);
}
return ans;
}
}
但是在解决这个问题时我不明白为什么我在数组列表中的 A.size()-1 位置添加 -1 时出错,其中 A : [ 34, 35, 27, 42, 5, 28, 39, 20, 28]
A.size()
是 0
,因为列表中还没有元素。数组应该用起始值初始化,列表(ArrayLists)不是。
您应该在没有容量的情况下初始化 ArrayList:
ArrayList<Integer> ans= new ArrayList<>();
那么你可以简单地
ans.add(-1);
或者更好的是,您可以在方法的最后添加 -1
。
ArrayList的构造函数是为了初始容量,这不是用元素填充ArrayList,在插入或添加元素之前大小为0。
我正在尝试解决一个问题,该问题表述为 -> 给定数组 A,为数组中的每个元素 A[i] 找到下一个更大的元素 G[i]。元素 A[i] 的下一个更大的元素是数组 A 中 A[i] 右侧的第一个更大的元素。没有更大元素的元素,将下一个更大的元素视为 -1.
public class Solution {
public ArrayList<Integer> nextGreater(ArrayList<Integer> A) {
Stack<Integer> stk = new Stack<>();
if (A.size() == 1)
{
ArrayList<Integer> ans= new ArrayList<>();
ans.add(0,-1);
return ans;
}
ArrayList<Integer> ans= new ArrayList<>(A.size());
ans.add(A.size()-1,-1); //error ->Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 8, Size: 0
stk.push(0);
for(int i=1;i<A.size()-1;i++){
while(!stk.isEmpty()&&A.get(i)>A.get(stk.peek())){
ans.add(stk.pop(),A.get(i));
// stk.pop();
}
stk.push(i);
}
return ans;
}
}
但是在解决这个问题时我不明白为什么我在数组列表中的 A.size()-1 位置添加 -1 时出错,其中 A : [ 34, 35, 27, 42, 5, 28, 39, 20, 28]
A.size()
是 0
,因为列表中还没有元素。数组应该用起始值初始化,列表(ArrayLists)不是。
您应该在没有容量的情况下初始化 ArrayList:
ArrayList<Integer> ans= new ArrayList<>();
那么你可以简单地
ans.add(-1);
或者更好的是,您可以在方法的最后添加 -1
。
ArrayList的构造函数是为了初始容量,这不是用元素填充ArrayList,在插入或添加元素之前大小为0。