我在一个更大的问题中遇到了一个小问题。
我有一组正整数。我需要在数组中找到一个位置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 =>不存在
我正在考虑使用哈希表,但我并不确切知道如何使用哈希表。或排序会更好?有效创意的想法吗?
答案 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