Javascript JS-将嵌套的forloops转换为单个循环
Javascript JS-将嵌套的forloops转换为单个循环,javascript,algorithm,loops,nested,time-complexity,Javascript,Algorithm,Loops,Nested,Time Complexity,我需要将这个嵌套循环转换为单个循环 这是场景的循环: 第一个递增器是i,它从0开始,应该一直运行到10 第二个递增器是j,它从开始,从+1开始,一直运行到10 。 我的嵌套循环 for(变量i=0;i
我需要将这个嵌套循环转换为单个循环 这是场景的循环:
- 第一个递增器是i,它从0开始,应该一直运行到10
- 第二个递增器是j,它从开始,从+1开始,一直运行到10
for(变量i=0;i<10;i++){
对于(var j=i+1;j<10;j++){
如果(某些条件){
做某事
}
}
}
我的转换尝试
var i=0;
而(i<10){
var j=i+1;
如果(j<10){
如果(某些条件){
做某事
}
j++;
}
i++;
}
不幸的是,我的尝试没有产生预期的结果。
第二个代码段不提供第一个代码段提供的输出。
谁能告诉我我的错误是什么,或者为我提供更好的解决方案来实现我的目标
谢谢 您需要在else语句中更新
i
,或者使用continue
。并在while主体外部声明j
但请记住,这既不会改变“复杂性顺序”,也不会“优化”代码
var i=0;
var j=1;
而(i<10){
如果(j<10){
如果(真){
控制台日志(i,j)
}
j++;
}否则{
i++;
j=i+1;
}
}
不确定它是否提高了可读性和复杂性,但以下内容应该会产生同样的效果
var i=0,j=1;
而(i<9){
控制台日志(i,j);
j+=1;
如果(j>=10){i+=1;j=i+1}
}
您可以调整i
的循环长度,并检查j
是否大于或等于9
,然后增加i并从新的j
开始
var i=0,
j=1;
而(i<9){
控制台日志(i,j);
//你喜欢吃东西吗
如果(j>=9)j=++i;
j++;
}
.as控制台包装{最大高度:100%!重要;顶部:0;}
if(true)
??奇怪的转到第一个嵌套循环是O(1/2N^2)(或者基本上是N^2),您正试图将其转换为O(N)。我认为这是不可能的,除非您的第一个代码块首先误用了嵌套循环。你可能想提供一个条件“这样我就可以优化复杂性的顺序。”这不是它的工作原理。如果你想在这对i
和j
上迭代,那么你的循环将迭代O(n^2)次,因为这就是你想要循环迭代的次数。要迭代的i
和j
有O(n^2)对,因此无法通过更改迭代方式来提高时间复杂度。
for (var i = 0; i < 10; i++) {
for (var j = i + 1; j < 10; j++) {
if (some_condition) {
do_sth()
}
}
}
var i = 0;
while (i < 10){
var j = i + 1;
if (j < 10) {
if (some_condition) {
do_sth()
}
j++;
}
i++;
}