数组逆序的正常思路
题目中提供的思路是最糟糕的算法,极为臃肿地多开辟一个新数组,使得空间复杂度为O(n)。
以下方法相对较好,时间复杂度为O(n/2),比参考思路O(n)节省一半;空间复杂度为O(1)。
function reverseArray(arrayName) //数组逆序 { let len = arrayName.length; let temp = 0; for (let i = 0; i < (len - 1) / 2; ++i) { temp = arrayName[i]; arrayName[i] = arrayName[len - 1 - i]; arrayName[len - 1 - i] = temp; } return arrayName; } let myArray = []; let myNumber = prompt("请输入一个数字(输入*结束):"); while (myNumber != "*") { myArray.push(myNumber); myNumber = prompt("请输入一个数字(输入*结束):"); } document.write("原数组:"); document.write(myArray + "<br>"); reverseArray(myArray); document.write("逆序后的数组:"); document.write(myArray);
正在回答
同学你好!
查看同学的回复,看的出来想的特别周到。在实际开发中,项目的实现需求中是需要面面俱到哦~
不过针对本练习,侧重在于实现数组反转这个知识点,所以对于空间的占用这些因素不可以忽略不计。而且实际工作中很少有做反转数据的需求,所以这里更重要的是对这个知识点的掌握,以及以后的使用。编程是灵活的,这里提供的思路只是其中一种,而且有人觉得代码行数少就是最佳的思路,有人觉得逻辑十分精确就是最佳的思路,这需要看练习者的基础知识掌握。不过同学的建议我们也会接受,编程需要注意细节,我们一起进步,提升!
祝学习愉快~
你好同学,首先表扬一下,你是一个非常聪明爱学的孩子,在学习上非常善于思考,自学能力也很强。像本题效果也实现了。不过虽然少定义了一个数组,但是代码中也多定义了一个变量temp。temp也是占内存的,虽然比数组占用的内存小一点,但是这个差距非常小。而且代码多了,代码运行的时间就长了。(虽然差距也可以忽略不计,但是代码的简洁性,性能,可维护性等都是要综合考虑的哦)
你考虑的初衷是好的,但是实际开发中,不会去考虑这种微乎其微的占用空间的问题,因为它们的影响很小。同学想想,实际项目时很大的,代码非常多。如果每一个需求都要这样考虑,那么开发时间成本就很大了。既费时,又没有讨打什么好处。
像入门阶段,代码逻辑都没有那么复杂呢,可以不用过多的考虑内存问题哦。学习要循序渐进,本阶段最重要的还是多花时间学习基础。 等以后学到高级阶段,再去考虑更好。不过同学善于思考还是非常值得鼓励的。很棒!
继续加油,祝学习愉快,望采纳。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星