【LeetCode】python 主要元素 摩根投票法

news2024/12/24 22:03:07

目录

题目:

题解:

1.纯暴力(字典)

2. 摩根投票法


题目:

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

示例 1:

输入:[1,2,5,9,5,9,5,5,5]
输出:5
示例 2:

输入:[3,2]
输出:-1
示例 3:

输入:[2,2,1,1,1,2,2]
输出:2

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-majority-element-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:

1.纯暴力(字典)

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        if len(nums)==2:
            if nums[0] == nums[1]:
                return nums[0]
        if len(nums)==1:
            return nums[0]
        else:
            data = {}
            for i in range(len(nums)):
                if nums[i] not in data:
                    data[nums[i]] = 1
                else:
                    data[nums[i]] += 1
                if data[nums[i]] > len(nums)//2:
                    return nums[i]
        return -1

2. 摩根投票法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        candidate = None
        count = 0
        for num in nums:
            if count == 0:
                candidate = num
            count += 1 if num == candidate else -1
        if nums.count(candidate) > len(nums) // 2:
            return candidate
        else:
            return -1

```
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        candidate = None  # 初始化候选人
        count = 0  # 初始化候选人票数
        for num in nums:  # 遍历数组中的每个元素
            if count == 0:  # 如果候选人票数为0,则将当前元素设为候选人
                candidate = num
            count += 1 if num == candidate else -1  # 如果当前元素等于候选人,则票数加1,否则减1
        if nums.count(candidate) > len(nums) // 2:  # 如果候选人的票数超过数组长度的一半,则返回候选人
            return candidate
        else:  # 否则返回-1
            return -1
```

这段代码使用了摩尔投票算法,通过遍历数组中的每个元素,找出出现次数超过数组长度一半的元素。具体实现步骤如下:

1. 初始化候选人和候选人票数为0。
2. 遍历数组中的每个元素:
   - 如果候选人票数为0,则将当前元素设为候选人。
   - 如果当前元素等于候选人,则票数加1,否则减1。
3. 如果候选人的票数超过数组长度的一半,则返回候选人,否则返回-1。

这个算法的时间复杂度为O(n),空间复杂度为O(1)。

 

有趣的摩根投票法(还是挺有趣的)

摩根投票法(Morgan's Canon)是一种科学方法论原则,由19世纪英国心理学家康威·劳埃德·摩根(Conwy Lloyd Morgan)提出。该原则强调在解释动物行为时,应该首先考虑最简单的解释,而不是假设动物具有人类的智力和意识

摩根投票法的提出是为了解决心理学研究中的一些争议。当时,一些心理学家认为动物具有人类的智力和意识,可以通过观察和解释它们的行为来了解它们的心理状态。但是,这种观点受到了另一些心理学家的质疑,他们认为这种解释过于主观,缺乏科学依据。

为了解决这个问题,摩根提出了摩根投票法。该法则要求在解释动物行为时,应该首先考虑最简单的解释,即不假设动物具有人类的智力和意识。只有在没有更简单的解释时,才能考虑更复杂的解释。这种方法可以避免主观偏见和过度解释,使研究更加客观和科学。

摩根投票法的提出对心理学和行为科学研究产生了深远的影响。它强调了科学研究的客观性和严谨性,促进了心理学和行为科学的发展。同时,它也引发了一些争议。一些人认为,摩根投票法过于简单化了动物行为的解释,忽略了动物的智力和意识。但是,摩根投票法仍然是一种重要的科学方法论原则,被广泛应用于心理学、生物学、计算机科学等领域的研究中。

总之,摩根投票法是一种科学方法论原则,强调在解释动物行为时应该首先考虑最简单的解释,避免主观偏见和过度解释,促进了心理学和行为科学的发展。        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑中的个人私密视频该怎么加密?

因为电脑内存空间较大,所以很多人喜欢将拍摄的视频存放在电脑中,这其中就会有一些比较私密,不适合被其他人看到的视频。为了保护这些视频的安全,我们需要合适的方法对其进行加密保护。下面我们就一起来了解一下电脑中的个人私密视…

GAMES101笔记 Lecture 01

目录 Overview of Computer Graphics图形学的应用场景Video GamesMoviesAnimationsDesignVisualizationVirtual RealityDigital IllustrationSimulationGraphical User InterfacesTypography 为什么要学习计算机图形学?Fundamental Intellectual Challenges(图形学很…

Opencv-C++笔记 (5) : opencv-形态学

文章目录 1、形态学运算与结构2、腐蚀膨胀运算3、膨胀4、自定义结构元素5、开闭运算开运算闭运算 6、形态学梯度7、其他形态学-顶帽、黑帽、击中不击中8、核函数矩形核十字形核椭圆核 1、形态学运算与结构 形态学运算是针对二值图像依据数学形态学(Mathematical Morphology)的集…

Prefix-Tuning: Optimizing Continuous Prompts for Generation

《Prefix-Tuning: Optimizing Continuous Prompts for Generation》阅读笔记 论文题目:Prefix-Tuning: Optimizing Continuous Prompts for Generation论文链接:https://arxiv.org/pdf/2101.00190论文来源:Arxiv (2021&#xff0…

CentOS 7安装 Postgre

零、前置条件 系统CentOS 7,并已联网,已安装gcc或者g编译器,GNU make版本3.80或以上,系统有至少一个除root之外的普通用户user gcc安装-参考链接查看make命令的版本——make --version更新make版本-参考链接postgresql的使用一般…

【nginx】网页上传文件报错413 Request Entity Too Lange

前言 413 Request Entity Too Lange,由于您的请求实体太长,服务器无法处理。请尝试缩短请求体的内容或者采取其他方式进行操作。如果问题仍然存在,请检查您的请求是否符合服务器的限制和要求,并尝试联系服务器管理员寻求帮助 可以…

轻松掌握 Postman Newman API 测试技巧

目录 前言: Postman Newman 是什么? Postman Newman 的作用 如何使用 Postman Newman? 第一步:安装 Node.js 第二步:全局安装 Newman 第三步:导出集合或环境变量为 JSON 格式 第四步:使…

Python-Selenium-定位详解

目录 前言: 一、id定位 二、name定位 三、class_name定位 四、xpath定位 五、css_selector定位 六、tag_name定位 七、link_text 定位 八、Xpath&Css定位方法速查表 九、By定位 十、elements复数定位 十一、JS的定位 前言: Python是一种…

Jetpack Compose中的LaunchedEffect与rememberCoroutineScope

Jetpack Compose中的LaunchedEffect与rememberCoroutineScope 深入了解Compose副作用API LaunchedEffect和rememberCoroutineScope。 探索使用LaunchedEffect和rememberCoroutineScope的区别和使用场景。 什么是副作用? 副作用是指在可组合函数范围之外发生的任何…

2024考研408-计算机组成原理第三章-存储系统

文章目录 前言一、存储器概述1.1、层次结构1.2、存储器分类1.2.1、层次分类1.2.2、存储介质分类1.2.3、存取方式1.2.4、按照信息的可更改性(读写、只读区别) 1.3、存储器性能指标知识回顾 二、主存储器2.1、主存储器的基本组成(介绍DRAM&…

Axios和Spring MVC[前端和后端的请求和响应处理]

在前后端交互中,Axios和Spring MVC扮演着不同的角色,分别负责前端和后端的请求和响应处理。它们之间的作用如下: Axios(前端): 发送HTTP请求:前端使用Axios库发送HTTP请求到后端。可以使用Axi…

HarmonyOS 极客马拉松2023 正式启动,诚邀极客们用键盘码出无限可能!

原文:HarmonyOS 极客马拉松2023 正式启动,诚邀极客们用键盘码出无限可能!,点击链接查看原文进入报名通道。 2023年6月15日, HarmonyOS极客马拉松2023开赛!期待各位开发者极客朋友一起,探索移动应…

IT自动化运维工具优势与劣势分析-行云管家

随着自动化技术的进步,目前市面上出现了不少IT自动化运维工具。但很多人对于IT自动化运维工具优劣势不是很清楚,这里我们就来一起简单分析分析。 IT自动化运维工具优势 1、提高IT运维工作人员工作效率,提升整体项目效率; 2、提…

HQChart使用教程30-K线图如何对接第3方数据37-如何绘制圆点

HQChart使用教程30-K线图如何对接第3方数据37-如何绘制圆点 效果图步骤json格式nametypeDrawDraw.DrawTypeDraw.DrawData[] HQChart代码地址 效果图 步骤 步骤和第3方指标替换一样, 通过网络协议回调,知道需要执行的指标, 替换自己的数据。这…

chatgpt赋能python:Python中的整数筛选与小数筛选

Python中的整数筛选与小数筛选 Python是一种高级编程语言,常见于各种领域的编程工作中。在Python中,我们可以很方便地筛选整数和小数,用于数据分析、算法计算、图像处理等多个方向。本文将从Python中的整数筛选和小数筛选两个方面进行介绍和…

90%电子工程师都没学透的3W规则,这篇文章一次性告诉你

在PCB设计中,了解和应用3W规则是非常重要的,能帮助工程师在设计阶段时考虑到电路板的功率分布、热管理和可靠性,但很多电子工程师对3W规则只处于皮毛学习阶段,没有做到真正掌握,导致电子设计技术没长进,所以…

​一些常见网络安全术语​

1、黑帽 为非法目的进行黑客攻击的人,通常是为了经济利益。他们进入安全网络以销毁,赎回,修改或窃取数据,或使网络无法用于授权用户。这个名字来源于这样一个事实:老式的黑白西部电影中的恶棍很容易被电影观众识别&…

Mac中开发常用的软件

Mac中开发常用的软件 https://pan.baidu.com/ 开发软件 IDEA2021IntelliJ IDEA 2022 for Mac(最好用的Java开发工具)永久激活版SnailSVNRedisDesktopManagerTermius终端SourceTree(Git)Microsoft Remote Desktop(远程桌面) 数据…

flutter系列之:做一个图像滤镜

文章目录 简介我们的目标带滤镜的图片打造filter按钮打造可滑动按钮最后要解决的问题 简介 很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。 那么如果在…

复合垂直纳米线中硅锗的选择性湿法蚀刻

引言 目前,对高效能和高性能微电子组件的持续需求是晶体管小型化和芯片密度增加的关键驱动因素。这些纳米级晶体管的性能取决于其架构和材料特性。由于更好的静电性能,全栅场效应晶体管(GAAFET)有望取代当前的FinFET架构。 垂直GAAFET很难集成到当前的…