【算法】小点:List.remove

1、List.remove

在写一道简单递归时发现问题:

cur.add(nums[i]); dfs(nums,cur,res); cur.remove(nums[i]); 主要是这三行代码,发现出现指针异常。其实问题是:

List的remove方法有两个重载:remove(int index)和remove(Object o)。

在这里,nums[i]是int类型,所以调用的是remove(int index)方法,它会移除指定索引位置的元素。

如果当前列表cur的大小为size,那么索引范围是0到size-1。当我们调用cur.remove(nums[i])时,如果nums[i]的值大于等于cur的大小,就会抛出IndexOutOfBoundsException。

所以,在递归回溯时,我们通常移除最后一个元素,所以更常见的写法是:

cur.remove(cur.size()-1);

或者,如果我们知道要移除的对象,也可以使用:

cur.remove(Integer.valueOf(nums[i]));

2、add(cur)

知道在写回溯的时候,一般会有:List<List<Integer>> res= new ArrayList<>(); List<Integer> cur = new ArrayList<>() ;

然后在dfs中判断添加:res.add 不过要注意,这里面要写 res.add(new ArrayList(cur)); 每次都是新的,否则这个cur是同一个值,每个都一样。

相关推荐
剪一朵云爱着10 小时前
力扣81. 搜索旋转排序数组 II
算法·leetcode·职场和发展
报错小能手12 小时前
刷题日常 5 二叉树最大深度
算法
Greedy Alg13 小时前
LeetCode 84. 柱状图中最大的矩形(困难)
算法
im_AMBER13 小时前
Leetcode 52
笔记·学习·算法·leetcode
小欣加油13 小时前
leetcode 946 验证栈序列
c++·算法·leetcode·职场和发展
包饭厅咸鱼13 小时前
PaddleOCR----制作数据集,模型训练,验证 QT部署(未完成)
算法
无敌最俊朗@13 小时前
C++ 并发与同步速查笔记(整理版)
开发语言·c++·算法
王哈哈^_^14 小时前
【完整源码+数据集】课堂行为数据集,yolo课堂行为检测数据集 2090 张,学生课堂行为识别数据集,目标检测课堂行为识别系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
夏鹏今天学习了吗14 小时前
【LeetCode热题100(66/100)】寻找两个正序数组的中位数
算法·leetcode·职场和发展