一天两道力扣(7)

python 复制代码
class Solution(object):
    def majorityElement(self, nums):
        votes = 0
        for num in nums:
            if votes == 0: res = num
            if num == res:
                votes += 1 
            else:
                votes -= 1

        return res

思路:不管前面抵消的都是非众数还是说其中有一半众数,最后剩的一定还是众数

python 复制代码
class Solution(object):
    def productExceptSelf(self, nums):
        ans, tmp = [1] * len(nums), 1
        for i in range(1, len(nums)):
            ans[i] = ans[i - 1] * nums[i - 1]
        for i in range(len(nums) - 2, -1, -1):
            tmp *= nums[i + 1]
            ans[i] *= tmp
        return ans
        

思路:第一个循环使用数组ans[]来存储每个元素左侧元素乘积(从最左侧开始,每次往右乘一个数)。第二个循环不使用数组存储值,直接使用一个变量temp计算右侧元素乘积(从最右侧元素开始,每次往左乘一个数)。然后直接用ans[]*temp来计算最终结果,每一轮计算出temp就计算使用掉然后下一轮更新。最终就只用到两个单层循环和一个数组。