Поскольку вы знаете максимальное количество элементов, вы можете избежать сортировки, просто выделив логический массив и заполнив его.В псевдокоде:
define numsInOneThruN (int xarr[], int sz):
# Declare the boolean array and initialise to all false.
declare isSet[1..sz]
for all i in 1..sz:
isSet[i] = false
# For every number in list, if within range, set boolean value to true.
for all i in xarr:
if i >= 1 and i <= sz:
isSet[i] = true
# Check that all boolean values are true.
for all i in 1..sz:
if not isSet[i]:
return false
return true
Это имеет преимущество в том, что O(n)
сложность времени, а не в лучшем случае O(n log n)
- это, вероятно, не будет иметь значения для небольших наборов данных, но может стать важнымдля большего.
Следует также учитывать тот факт, что это имеет более высокую сложность пространства, чем сортировка на месте, так как она использует массив, равный размеру ввода.Это делает его O(n)
пробелом вместо O(1)
для опции сортировки.
Как всегда, вы обычно можете обменять пространство на время в зависимости от ваших потребностей.