一系列正整数,有效实施的想法

时间:2015-09-27 13:42:29

标签: python algorithm

我在一个更大的问题中遇到了一个小问题。

我有一组正整数。我需要在数组中找到一个位置i,这样所有小于位置i的元素的数字都应该出现在它之后。

示例:

(假设数组的索引为1)

2,3,4,1,9,3,2 =>第3位// 1,2,3小于4并且在它之后发生。

5,2,1,5 =>第二个位置

1,2,1 =>第二个位置

1,4,6,7,2,3 =>不存在

我正在考虑使用哈希表,但我并不确切知道如何使用哈希表。或排序会更好?有效创意的想法吗?

2 个答案:

答案 0 :(得分:2)

我们可以从创建一个地图(或哈希表或其他)开始,记录每个条目的最后一次出现:

for i from 1 to n
    lastOccurrence[arr[i]] = i
next

我们知道如果j是有效答案,则每个小于j的数字也是有效答案。所以我们希望找到最大j。最低j显然是1,因为左侧子列表为空。

然后我们可以迭代所有可能的j并检查它们的有效性。

maxJ = n
for j from 1 to n
    if j > maxJ
        return maxJ
    if lastOccurrence[arr[j]] == j
        return j
    maxJ = min(maxJ, lastOccurrence[arr[j]] - 1)
next

答案 1 :(得分:0)

from sets import Set
def findMaxIndex(array):
    lastSet = Set()
    size = len(array)
    maxIndex = size
    for index in range(size-1,-1,-1):
        if array[index] in lastSet:
            continue
        else:
            lastSet.add(array[index])
            maxIndex = index + 1
    if maxIndex == 1:
        return 0 # don't exist
    else:
        return maxIndex

从最后一个元素到第一个元素,使用set来保持元素满足,如果迭代元素(索引i)不在set中,则最大索引为{ {1}},并更新i