美文网首页
Python算法-投票计数法&最小前缀和

Python算法-投票计数法&最小前缀和

作者: ShowMeCoding | 来源:发表于2022-02-23 00:01 被阅读0次
面试题 17.10. 主要元素

数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。

  • 方法1:哈希表
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        n = len(nums)
        hashmap = defaultdict(int)    # 初始化一个值为0的字典
        for num in nums:
            hashmap[num] += 1
            if hashmap[num] > n // 2:
                return num
        return -1
  • 方法2:投票法
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        count, majority = 0, -1
        for num in nums:
            # 没有票数,指定某个数位主元素
            if count == 0:
                majority = num
            # 当与主元素相同,票数增加,不相同元素相互抵消
            if num == majority:
                count += 1
            else:
                count -= 1
        if count != 0 and nums.count(majority) > len(nums) // 2:
            return majority
        else:
            return -1
2016. 增量元素之间的最大差值

给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。
返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -1 。

输入:nums = [7,1,5,4]
输出:4
解释:
最大差值出现在 i = 1 且 j = 2 时,nums[j] - nums[i] = 5 - 1 = 4 。
注意,尽管 i = 1 且 j = 0 时 ,nums[j] - nums[i] = 7 - 1 = 6 > 4 ,但 i > j 不满足题面要求,所以 6 不是有效的答案。

  • 方法1:暴力求解
# 暴力求解法
class Solution:
    def maximumDifference(self, nums: List[int]) -> int:
        result = []
        for i in range(len(nums)-1):
            for j in range(i+1, len(nums)):
                result.append(nums[j]-nums[i])
        if max(result) <= 0:
            return -1
        else:
            return max(result)
  • 方法2:最小前缀和
class Solution:
    def maximumDifference(self, nums: List[int]) -> int:
        res = -1
        prenum = nums[0]
        n = len(nums)
        for i in range(1, n):
            if nums[i] > prenum:
                res = max(res, nums[i]-prenum)
            else:
                prenum = nums[i]
        return res
···

相关文章

  • Python算法-投票计数法&最小前缀和

    面试题 17.10. 主要元素[https://leetcode-cn.com/problems/find-maj...

  • python异或高阶应用-前缀异或法

    前言 我们在算法中经常会看到前缀和的解法,能够有效地降低算法复杂度。有一个和前缀和非常类似的算法,前缀异或法。 简...

  • 高可用实践-限流算法

    限流算法 常见的限流算法有计数器算法、漏桶算法和令牌桶算法。 计数器法 计数器算法“简单粗暴”。该算法会维护一个c...

  • JVM 垃圾回收算法

    垃圾回收算法分为:引用计数法、标记清除法、复制算法、标记压缩清除法、分代算法、分区算法等。 引用计数法:这是一个比...

  • JVM学习(5)垃圾回收算法

    一.概述: 主要讨论:引用计数法,标记压缩法,标记清除法,复制算法和分代分区的思想。 二.引用计数法(Refere...

  • python学习资料

    算法:Python中数据结构和算法的最小例子https://github.com/keon/algorithms?...

  • python实现计数排序(CountSort)

    python实现【计数排序】(CountSort) 算法原理及介绍 计数排序不是基于比较的排序算法,其核心在于将输...

  • Python编程练习048:最小公倍数算法

    Python 最小公倍数算法Python3 实例以下代码用于实现最小公倍数算法: 定义函数 def lcm(x, ...

  • GV算法及分区

    GV的算法有标记-清除算法、标记-整理算法、复制算法、分代算法;对于那些对象可以回收,有引用计数法和可达性分析算法...

  • 使用摩尔投票法解决多数问题

    1、什么是摩尔投票法 博耶-摩尔多数投票算法(英语:Boyer–Moore majority vote algor...

网友评论

      本文标题:Python算法-投票计数法&最小前缀和

      本文链接:https://www.haomeiwen.com/subject/cxgnlrtx.html