数组逆序的正常思路

数组逆序的正常思路

题目中提供的思路是最糟糕的算法,极为臃肿地多开辟一个新数组,使得空间复杂度为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);


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好!
查看同学的回复,看的出来想的特别周到。在实际开发中,项目的实现需求中是需要面面俱到哦~

不过针对本练习,侧重在于实现数组反转这个知识点,所以对于空间的占用这些因素不可以忽略不计。而且实际工作中很少有做反转数据的需求,所以这里更重要的是对这个知识点的掌握,以及以后的使用。编程是灵活的,这里提供的思路只是其中一种,而且有人觉得代码行数少就是最佳的思路,有人觉得逻辑十分精确就是最佳的思路,这需要看练习者的基础知识掌握。不过同学的建议我们也会接受,编程需要注意细节,我们一起进步,提升!

祝学习愉快~

好帮手慕夭夭 2019-09-14 16:59:09

你好同学,首先表扬一下,你是一个非常聪明爱学的孩子,在学习上非常善于思考,自学能力也很强。像本题效果也实现了。不过虽然少定义了一个数组,但是代码中也多定义了一个变量temp。temp也是占内存的,虽然比数组占用的内存小一点,但是这个差距非常小。而且代码多了,代码运行的时间就长了。(虽然差距也可以忽略不计,但是代码的简洁性,性能,可维护性等都是要综合考虑的哦)

你考虑的初衷是好的,但是实际开发中,不会去考虑这种微乎其微的占用空间的问题,因为它们的影响很小。同学想想,实际项目时很大的,代码非常多。如果每一个需求都要这样考虑,那么开发时间成本就很大了。既费时,又没有讨打什么好处。

像入门阶段,代码逻辑都没有那么复杂呢,可以不用过多的考虑内存问题哦。学习要循序渐进,本阶段最重要的还是多花时间学习基础。 等以后学到高级阶段,再去考虑更好。不过同学善于思考还是非常值得鼓励的。很棒!

继续加油,祝学习愉快,望采纳。

  • 【1】多使用一个temp变量,占用的空间有限,与问题的规模无关,即无论要逆序的数组有多大,都是多开辟一个变量而已,空间复杂度为O(1);而题目中提供的思路,多开辟一个数组,与问题的规模n有关,为O(n)。假如日后需求扩展,原数组变得很大,数据量几百万甚至更大,那么多开辟一个与原数组一样大的新数组带来的空间代价是难以承受的。 【2】老师回复中的“而且代码多了,代码运行的时间就长了”,恕不能苟同。这是由时间复杂度来衡量的,判断的标准是基本程序步,而不是多少行代码。相信不必赘言,数据结构中的基本知识。 【3】至于代码的简洁性、性能、可维护性等都是要综合考虑,这点毋庸置疑。在下认为,题目提供的思路恰恰是最糟糕的,无论从哪个标准来看都不好。而我的代码相对较好。平常人只要稍加思索也能够发现规律:数组逆序,无非是第1个元素与倒数第1个元素交换、第2个与倒数第2个交换......归纳就是:下标为i的元素与下标为len-1-i的元素交换。有了这个思路,代码也就写出来了。 【4】上面这些细节都是比较基本的问题,所以我希望掌握,也希望慕课可以适当提及一下,这样我们就会更喜欢课程。
    2019-09-14 22:33:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师