With just an unsorted array, there is no way to do this in sublinear time. Since you do not know which element is the largest and smallest, you must look at them all, therefore, at linear time.
The best variety you find will be worse than probably relatively n log n, so it will be βbetter" to perform a linear scan.
, . , :
- min max. O (1).
- min max , . O (1).
- min max "unknown", min max. O (1). , min/max, . , , , , . , .
- , . O (1).
- , , . O (1).
- , , , , . O (n).
, , min/max . , , .
, , , min/max .
, :
def initList ():
list = []
maxval = 0
maxcount = 0
. .
, :
def addToList (val):
list.add (val) error on failure
if list.size = 1:
maxval = val
maxcount = 1
return
if maxcount = 0:
return
if val < maxval:
return
if val = maxval:
maxcount += 1
return
maxval = val
maxcount = 1
. . , . , , - , , , .
, , , ( ):
def delFromList (val):
list.del (val) error on failure
if maxcount > 0 and val = maxval:
maxcount -= 1
- , , ( maxcount ). , :
def getMax ():
error if list.size = 0
if maxcount = 0:
maxval = list[0]
for each val in list:
if val = maxval:
maxcount += 1
elsif val > maxval:
maxval = val
maxcount = 1
return maxval
, , -, , list, maxval maxcount. , , , .