我有一個長度爲10的數組,填充數字0-9。在「無序」數組中找到數字的最佳方法?
這些數字(大部分)按順序排列。然而,起始索引處的數字可以是任意數字,並且數字是按照升序還是降序排列是未知的(數字一旦達到最小/最大數字 - 0就會迴繞,一旦達到9,反之亦然)。
其中的一個數字並不正確(就像它被拔出並隨機插入到數組中一樣)。
實施例:
[4, 3, 1, 0, 9, 8, 7, 2, 6, 5]
數2在索引7出故障。索引1和索引2之間的數字「差距」沒有問題,數字3或1也不合格。
查明無序數索引的最佳方法是什麼?
更多的例子 - 從地方數均標有*:
[2, 3, *0, 4, 5, 6, 7, 8, 9, 1]
[5, 6, 7, 9, *8, 0, 1, 2, 3, 4]
[7, 6, 5, 4, 3, *8, 2, 1, 0, 9]
[0, *5, 1, 2, 3, 4, 6, 7, 8, 9]
[4, 3, *0, 2, 1, 9, 8, 7, 6, 5]
你只需要通過數組循環,並使用一個變量來記住的號碼。如果最後一個號碼和當前號碼的差異不是1,那麼這個號碼不合格 – Raptor
這聽起來像一個有趣的求職面試問題:-) –
聽起來就像你想找到兩個不同的東西。一個是「無序」項目,另一個是「環繞」(否則可能被誤認爲是一個亂序項目)。 因此,通過列表記錄差異(seq [n-1] - seq [n]> 0)的跡象並查找任何情況下,您會看到兩個連續的符號更改。一個天真的執行可能會被退化的輸入所欺騙,否則你會在線性時間內找到你的「罪魁禍首」。一個沒有錯誤的數組將會是 - , - , - ...,最多隻有一個變化是+,+,+ ...但是這個指針是: - , - , - ,+, - ,+,。 .. (或相反亦然)。 –