two pass
class Solution:
def dominantIndex(self, A: List[int]) -> int:
""" O(N)/O(1)
1. find largetst val and idx
2. compare with all other elements
"""
# two pass
max_v = max_i = 0
for i in range(len(A)):
if A[i] > max_v:
max_v = A[i]
max_i = i
for a in A:
if a != max_v and a*2 > max_v:
return -1
return max_i
one pass : main idea is to find largets number and second largetst number and make sure second largest number’s 2 times is not bigger than largetst number
class Solution:
def dominantIndex(self, A: List[int]) -> int:
# one pass
""" O(N)/O(1)
1.edge case N == 1
2. find fst and snd ptr's idx
3. loop through, keep updating larget number's index; meanwhile updating snd largets number's idx by checking (1) before fst updating (2) snd <val < fst
"""
if len(A) == 1:
return 0
if A[0] > A[1]:
fst,snd = 0,1
else:
fst,snd = 1,0
for i in range(2,len(A)):
if A[fst] < A[i]:
snd = fst
fst = i
elif A[i] > A[snd]:
snd = i
return fst if A[snd]*2 <= A[fst] else -1