Python是一种广泛使用的高级编程语言,以其清晰的语法和代码可读性而闻名。以下是Python的一些关键特点和用途:
• 设计哲学:Python的设计哲学强调代码的可读性和简洁性。它的开发者Guido van Rossum创造了Python,希望它能够成为一种易于学习和使用的编程语言。
• 动态类型:Python是一种动态类型语言,这意味着变量不需要事先声明类型,类型会在运行时自动确定。
• 解释型语言:Python代码在运行时由解释器逐行执行,这使得调试和测试变得更加容易。
• 跨平台:Python可以在多种操作系统上运行,包括Windows、macOS和Linux。
• 强大的标准库:Python拥有一个庞大的标准库,提供了许多用于处理文件、系统调用、网络通信等的模块。
• 开源:Python是开源的,这意味着任何人都可以查看源代码、修改它,并将其分发给他人。
• 社区支持:Python拥有一个活跃的社区,提供了大量的第三方库和框架,这些库和框架可以用于各种任务,从Web开发到科学计算。
• 用途广泛:Python被用于多种领域,包括Web开发(Django、Flask等框架)、数据科学(Pandas、NumPy、SciPy等库)、机器学习(TensorFlow、PyTorch等)、自动化脚本、游戏开发等。
• 易于学习:Python的语法接近英语,对于初学者来说,它是学习编程的好选择。
• 自动内存管理:Python具有自动内存管理和垃圾回收功能,这减少了内存泄漏的风险。
• 可扩展性:Python允许使用C、C++等语言编写扩展模块,这使得Python可以用于性能要求较高的应用。
• 交互式解释器:Python的交互式解释器允许用户直接在命令行中测试代码片段,这使得快速原型开发和交互式学习成为可能。
Python的灵活性和多功能性使其成为全球最受欢迎的编程语言之一。无论是对于初学者还是专业人士,Python都是一个强大的工具。R从班级中抽取了一些同学,每位同学都会给出一个数字。已知在这些数字中,某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。
测试样例 样例1:
输入:array = [1, 3, 8, 2, 3, 1, 3, 3, 3] 输出:3
样例2:
输入:array = [5, 5, 5, 1, 2, 5, 5] 输出:5
样例3:
输入:array = [9, 9, 9, 9, 8, 9, 8, 8] 输出:9
方法 摩尔投票算法 是解决这个问题的一种高效算法。这个算法的核心思想是通过“投票”的方式,逐步排除掉不可能的候选数字,最终得到一个出现次数最多的数字。由于题目中说明有一个数字的出现次数超过了数组的一半,因此摩尔投票算法能够有效解决问题。
摩尔投票算法的工作原理: 投票阶段:首先选择一个候选数字,并将它的票数初始化为 1。然后遍历数组中的每个数字:
如果当前数字和候选数字相同,票数加 1。 如果当前数字和候选数字不同,票数减 1。如果票数减为 0,则选取当前数字作为新的候选数字,并将票数重置为 1。 确认阶段:在摩尔投票阶段结束后,我们得到一个候选数字。由于题目保证有一个数字出现次数超过数组总数的一半,因此最后的候选数字就是我们要找的数字。
代码实现:
7cc8f468fe50db1737f3741ae2f77d1.jpg 代码解释 摩尔投票算法:
我们使用 candidate 来记录当前的候选数字,count 来记录候选数字的票数。 如果票数为零,说明之前的候选数字被“淘汰”了,我们就将当前数字设为新的候选数字,并将票数设为 1。 如果当前数字与候选数字相同,票数加 1。 如果当前数字与候选数字不同,票数减 1。 保证正确性:
根据题目描述,存在一个数字的出现次数超过数组总长度的一半,因此最终的 candidate 一定是正确的数字。 时间复杂度 时间复杂度:O(N),其中 N 是数组的长度。我们只需要遍历数组一次来找到候选数字。 空间复杂度:O(1),只用了常数空间。 测试用例 输入:[1, 3, 8, 2, 3, 1, 3, 3, 3]
输出:3,3 出现了 5 次,超过了一半。 输入:[5, 5, 5, 1, 2, 5, 5]
输出:5,5 出现了 5 次,超过了一半。 输入:[9, 9, 9, 9, 8, 9, 8, 8]
输出:9,9 出现了 5 次,超过了一半。 笔记算法c++ 来自专栏 刷题笔记