力扣题,我先用中序遍历得到一个有序的arraylist集合,然后遍历该集合得到数组,但是结果报错。但是我将arraylist转换成数组后在进行一样的操作却没有报错,这是怎么回事啊?
报错代码:public class FindMode {
List<Integer> list = new ArrayList<> ();
public int[] findMode(TreeNode root) {
List<Integer> ans = new ArrayList<> ();
int max = Integer.MIN_VALUE;
inorder ( root );
int i =0;
while (isize ()){
int size = 1;
while (isize ()-1&&list.get ( i )==list.get ( i+1 )){
size++;
i++;
}
if(size>max){
while (ans.size ()!=0){
ans.remove ( ans.size ()-1 );
}
ans.add ( list.get ( i ) );
max = size;
}else if(size==max) ans.add ( list.get ( i ) );
i++;
}
return ans.stream ().mapToInt ( Integer::intValue ).toArray ();
}
public void inorder(TreeNode root){
if(root==null) return;
inorder ( root.left );
list.add ( root.val );
inorder ( root.right );
}
}
正确代码:
List list = new ArrayList<> ();
public int[] findMode(TreeNode root) {
List ans = new ArrayList<> ();
int max = Integer.MIN_VALUE;
inorder ( root );
int[] ints = list.stream ().mapToInt ( Integer::intValue ).toArray ();
int i =0;
while (ilength){
int size = 1;
while (ilength-1&&ints[i]==ints[i+1]){
size++;
i++;
}
if(size>max){
while (ans.size ()!=0){
ans.remove ( ans.size ()-1 );
}
ans.add ( ints[i] );
max = size;
}else if(size==max) ans.add ( ints[i] );
i++;
}
return ans.stream ().mapToInt ( Integer::intValue ).toArray ();
}
public void inorder(TreeNode root){
if(root==null) return;
inorder ( root.left );
list.add ( root.val );
inorder ( root.right );
}
报了什么错