这个for循环的java复杂性
我对一个方法的运行时间感到困惑。方法如下:
public void remove(List<String> list){
for(int i = 0; i < list.size(); i++)
list.remove(0);
}
有人能给我解释一下为什么这只会运行N/2次而不是N次吗
你可以在下面搜索框中键入要查询的问题!
我对一个方法的运行时间感到困惑。方法如下:
public void remove(List<String> list){
for(int i = 0; i < list.size(); i++)
list.remove(0);
}
有人能给我解释一下为什么这只会运行N/2次而不是N次吗
# 1 楼答案
这是因为你在循环列表。大小()条件。由于每个步骤都要删除一个元素,因此列表。大小()将更小
如果要从列表中删除所有元素,可以使用list。清除()
# 2 楼答案
因为在每个循环中都要删除第0个元素,在N/2次迭代之后,“i”将是N/2,列表的大小也将是N/2。所以在那之后,循环将退出
请注意,列表大小下降了1,“i”增加了1,因此N/2次迭代
如果N是奇数,它将是(N/2)+1
# 3 楼答案
实际上,循环执行
M = (N+1)/2
次,其中/
是整数除法运行这个测试程序,你就会明白为什么循环只运行
M
次用这句话也可以试试
lst.add("FFF");
注释掉这里的关键是
list.size()
值在删除元素时会发生变化# 4 楼答案
由于要删除列表中的每个成员,因此需要执行与列表的原始大小相同的循环次数