子集 Leetcode,列表的大小
Subset Leetcode, size of a List
编译时我真的对一件事感到好奇,在下面给定的代码中,我在其中创建嵌套的 for 循环,我给出了一个限制
subsetArr.size()
但是在编译时说内存超出了,如果我在for循环之前定义大小
int size = subsetArr.size()
然后将限制作为大小传递
i<size;
它工作正常。可能是什么原因?
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> subsetArr = new ArrayList<>();
subsetArr.add(new ArrayList());
for(int num: nums){
for(int i=0; i<subsetArr.size(); i++){
List<Integer> takenList = new ArrayList<>(subsetArr.get(i));
takenList.add(num);
subsetArr.add(takenList);
}
}
return subsetArr;
}
}
看看这个循环做了什么:
for(int i=0; i<subsetArr.size(); i++){
List<Integer> takenList = new ArrayList<>(subsetArr.get(i));
takenList.add(num);
subsetArr.add(takenList); // <-- here
}
每次迭代 都会将 添加到集合中。所以在下一次迭代中,subsetArr.size()
将 变大 。因此你有一个无限增加集合大小的循环,直到它耗尽资源。
将其与存储值时进行对比:
int size = subsetArr.size();
在这种情况下,虽然 subsetArr.size()
可能会更改,但 size
不会更改,除非您更新它。所以只要你不更新 size
那么你就会有一个有限循环。
编译时我真的对一件事感到好奇,在下面给定的代码中,我在其中创建嵌套的 for 循环,我给出了一个限制
subsetArr.size()
但是在编译时说内存超出了,如果我在for循环之前定义大小
int size = subsetArr.size()
然后将限制作为大小传递
i<size;
它工作正常。可能是什么原因?
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> subsetArr = new ArrayList<>();
subsetArr.add(new ArrayList());
for(int num: nums){
for(int i=0; i<subsetArr.size(); i++){
List<Integer> takenList = new ArrayList<>(subsetArr.get(i));
takenList.add(num);
subsetArr.add(takenList);
}
}
return subsetArr;
}
}
看看这个循环做了什么:
for(int i=0; i<subsetArr.size(); i++){
List<Integer> takenList = new ArrayList<>(subsetArr.get(i));
takenList.add(num);
subsetArr.add(takenList); // <-- here
}
每次迭代 都会将 添加到集合中。所以在下一次迭代中,subsetArr.size()
将 变大 。因此你有一个无限增加集合大小的循环,直到它耗尽资源。
将其与存储值时进行对比:
int size = subsetArr.size();
在这种情况下,虽然 subsetArr.size()
可能会更改,但 size
不会更改,除非您更新它。所以只要你不更新 size
那么你就会有一个有限循环。