java - 查找数组中消失的所有数字(获取 IndexOutOFBoundsException
问题描述
我不断收到 IndexOutOFBoundsException ,我似乎找不到在哪里。我花了很长时间试图弄清楚这一点。任何帮助,将不胜感激。谢谢
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
if(nums.length < 2){
return new ArrayList<Integer>();
}
List<Integer> ret = new ArrayList<Integer>(nums.length);
for(int i=0; i < nums.length; i++){
ret.set(i,i);
}
for(int i=0; i < nums.length; i++){
ret.set(nums[i]-1, nums[i]);
}
for(int i=0; i < nums.length; i++){
if(ret.get(i) == 0){
ret.set(i, i+1);
}
else{
ret.remove(i);
}
}
return ret;
}
}
解决方案
for(int i=0; i < nums.length; i++){
ret.set(nums[i]-1, nums[i]);
}
在那里您将nums[i]-1
s 索引设置为,但如果小于或等于或大于长度nums[i]
,它将引发错误。nums[i]
0
正如@ Bahij.Mik的另一个回答所说(一定要投赞成票),此时列表中没有任何元素。
您可能想要使用add()
而不是set()
此处。
请注意,这new ArrayList<>(number)
将为元素创建一个ArrayList
带有初始空间的新n
元素,它不会像使用数组那样填充元素(即使是 null)
此外,在
for(int i=0; i < nums.length; i++){
if(ret.get(i) == 0){
ret.set(i, i+1);
}
else{
ret.remove(i);
}
}
您在迭代ArrayList
.
这将减小 的大小,ArrayList
并且如果您在某个时候删除了一个元素,您将迭代越界。
推荐阅读
- javascript - 反应导入材料-ui组件不起作用
- python - click.testing.CliRunner 和处理 SIGINT/SIGTERM 信号
- r - 如果 B 列包含字符串,则替换 A 列的值
- c - 使用 binutils 为裸机 ARM 从应用程序代码 (ROM) 创建存根库/对象
- c# - 通过 Ajax 从控制器执行功能
- clickhouse - clickhouse-client - 插入大量数据因内存中断而失败
- flutter - 如何使 Widget 尽可能小(Android 中的 wrap_content)?
- makefile - 将环境变量从 makefile 导出到 shell
- wifi - 安装arch linux后网络连接问题
- javascript - jQuery Javascript 在 MVC 中的表中添加了一个额外的行