Generally speaking, the time complexity is O(N), as we traverse through the whole list. The space complexity is not O(1), because slicing the list creates new copy. But we can avoid creating copy by using
for n in itertools.islice(nums, 3, len(nums)):. I personally think traversing iterators might be slower than traversing list, but not quite sure.
class Solution(object): def maximumProduct(self, nums): """ :type nums: List[int] :rtype: int """ temp = nums[:3] temp.sort() n1,n2,n3 = temp s2,s1 = temp[:2] for n in nums[3:]: if n > n3: n3, n2, n1 = n, n3, n2 elif n > n2: n2, n1 = n, n2 elif n > n1: n1 = n if n < s2: s2, s1 = n, s2 elif n < s1: s1 = n return max(n1 * n2 * n3, s1 * s2 * n3)