我知道这是个很愚蠢的问题。我作为一个初学者问这个问题,因为我正在学习DsAlgo。
所以我们举个例子,简单的旋转一个排序数组。
有两种方法我可以遵循.1.STL2.不使用STL。
我可以简单地通过使用 std::rotate
或者我可以使用杂耍算法。这两种方法的大O复杂度都是O(n)。
那么如果我可以简单的把一个代码做成两行,为什么还要学习不同的算法呢?
我真的很困惑,我应该选择哪种方式。
如果标准库有算法,可以完成你的工作。你应该使用它们! 这里有几个原因。
当然你可以把你的代码做成2行。它应该是这样的。你应该使用 标准库 因为它们是在考虑到很多因素的情况下写出来的。
现在的问题是,你为什么要学习算法。
库提供了抽象的实现。你不知道幕后发生了什么。
有些库是开源的,通过这些库,你可以学习如何编写代码的最佳实践,因为它们是由编写编译器的人开发的。
现在,如果你想实现任何对时间和空间复杂度有特殊限制的用例,你应该知道什么是算法,它是如何工作的,是否适合用例。
通过学习算法,你还可以为特定的用例设计新的算法,这些算法在标准库中是找不到的。库只是提供基本算法的解决方案,而不是所有的算法。
通过学习算法,你可以开发自己的库,并将其公开,以便其他开发人员可以使用它来节省时间并构建一个强大的代码。