每当我偶然发现DSA问题时,我总是看到诸如I - array dot length、I - array[I]、I + variabke或ith - j - 1之类的用法,特别是在数组中。我一直认为它是一个负数索引,使它没有定义,但我看到大多数程序员经常使用这个公式。这意味着什么?它是如何工作的?
我认为你所挣扎的是0索引的结果。
正如Dijkstra解释的那样,编程语言有各种不同的数组索引符号可供使用。由于各种原因,包括Dijkstra给出的原因,大多数语言都确定了以下符号规则。
the index of an array element is its distance from the start
因此第一个元素出现在索引0处。SECOND出现在索引1。如果数组的长度为n
,则最后一个元素出现在索引n-1
处。任何必须显式处理数组索引的算法都必须意识到这一点,并且经常会因为它而出现似乎是随机放置的-1。但如果你仔细思考逻辑,它们是完全合乎逻辑的,并且有一个重要的目的。
通常我们不必担心它。例如,在Python中,你可以输入:
for x in some_list:
...
如果你需要索引,你可以写:
for x in range(len(some_list)):
...
在像C这样的低级语言中,你必须是显式的,但你只需要习惯这样写:
for (int i = 0; i < n; i++) {
...
}
因此,这个细节以最自然的方式淡入背景,以编写代码。(事实上,它很容易做到,而且错误很少,这是采用该约定的部分原因!)但是当你需要明确地思考它时,你需要意识到它。