LeetCode算法—分治法

news/2024/11/15 9:06:58/文章来源:https://www.cnblogs.com/gsupl/p/18412410

思路:分治法的核心思想是“分而治之”,即将一个复杂的问题分成多个较小的子问题,分别求解这些子问题,然后将子问题的解合并,得到原问题的解。具体到求众数的问题上,分治法通过递归地将数组分成两部分,分别找出每一部分的众数,最后通过合并步骤来确定整个数组的众数。

LeetCode

169多数元素

#方法1 分治递归解决-5.3%
class Solution:def majorityElement(self, nums: List[int]) -> int:def majority_element_rec(start, end):if start == end:return nums[start]mid = (start + end) // 2left_majority = majority_element_rec(start, mid)right_majority = majority_element_rec(mid + 1, end)if left_majority == right_majority:return left_majorityreturn max([left_majority, right_majority], key=nums[start:end + 1].count)return majority_element_rec(0, len(nums) - 1)
#方法2 哈希表-5.4%
class Solution:def majorityElement(self, nums: List[int]) -> int:hash_map={}for i in nums:if i in hash_map:hash_map[i]+=1else:hash_map[i]=1for key,value in hash_map.items():if value>len(nums)/2:return key
#方法3 排序-97%(效率最高)
class Solution:def majorityElement(self, nums: List[int]) -> int:nums.sort()return int(nums[len(nums)//2])

53 最大数组和

#方法1 动态规划
class Solution:def maxSubArray(self, nums: List[int]) -> int:# 初始化 max_current 和 max_global 为数组的第一个元素max_current = max_global = nums[0]# 从第二个元素开始遍历for num in nums[1:]:# 更新当前子数组的最大和max_current = max(num, max_current + num)# 更新全局最大子数组的和max_global = max(max_global, max_current)return max_global#方法2 分治法-不推荐
class Solution:def maxSubArray(self, nums: List[int]) -> int:def find_max_subarray(nums, left, right):# 基础情况:只有一个元素时if left == right:return nums[left]mid = (left + right) // 2# 递归地求左半部分和右半部分的最大子数组和left_max = find_max_subarray(nums, left, mid)right_max = find_max_subarray(nums, mid + 1, right)# 计算跨越中点的最大子数组和cross_max = find_cross_max_subarray(nums, left, mid, right)# 返回三者中的最大值return max(left_max, right_max, cross_max)def find_cross_max_subarray(nums, left, mid, right):# 从中点向左计算最大子数组和left_sum = float('-inf')curr_sum = 0for i in range(mid, left - 1, -1):curr_sum += nums[i]left_sum = max(left_sum, curr_sum)# 从中点向右计算最大子数组和right_sum = float('-inf')curr_sum = 0for i in range(mid + 1, right + 1):curr_sum += nums[i]right_sum = max(right_sum, curr_sum)# 跨越中点的最大子数组和return left_sum + right_sumreturn find_max_subarray(nums, 0, len(nums) - 1)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习高校课程-软件设计模式-OOP 和 UML 类图 OOP 与 Java(lec1)

OOP 和 UML 类图 OOP 与 JavaLecture 1:OOP and UML Class DiagramsOOP with Java OOP 和 UML 类图 OOP 与 Java Object-Oriented Programming 面向对象编程Class Hierarchies 类层次结构 Superclass and subclass 超类和子类Pillars of Object-Oriented Programming 面向对象…

路由器刷机踩坑

ssh/telnet 路由器一般是用23端口,也就是telnet。具体如何开启ssh看型号。 breed breed是一个bootloader,在功能上类似于手机的Rec,用于提供一个界面刷入不同分区的镜像(至少不用敲命令行了)。 注意 breed不能用于刷入原厂固件,否则会砖(我就是这么干的)。 这是恩山论坛…

Pbootcms网站挂马解决方案(详细说明)

当你的PbootCMS网站被挂马时,应该立即采取措施来清除恶意代码,并加强系统的安全性,防止未来的攻击。以下是一个详细的解决方案: 1. 备份现有数据 在开始任何修复工作之前,首先备份你的网站数据,包括数据库和文件系统。这一步骤是为了防止在修复过程中丢失重要数据。 2. 检…

SVN在MacOS下报E230001错误

#macos #rider for Mac #SVN #E230001svn为什么会报E230001错误呢?根据详细错误信息Server SSL certificate verification failed: certificate issued知道这是https证书有问题,不用管它证书了,这里介绍一种简单的方法。 首先,打开终端(terminal,mac os/linux一般都是带…

面试-JS Web API - 存储

cookie HTML5存储(localStorage 和 sessionStorage)cookie cookie本身用于浏览器和server通讯的,被借用到本地存储来。可以用document.cookie来修改。同一个变量会覆盖,不同变量会追加。localStorage 和 sessionStorage// 保存数据到 localStorage localStorage.getItem(a,10…

MySQL8的新特性

一 字典数据与资源管理1.1 数据字典 以前MySQL都是采用元数据文件、非事务性表结构或者是存储引擎特有的方式来存储字典数据,这些字典数据通常都是以数据对象为主,比如说最常见的表结构信息等。 在MySQL8.0中,这些字典数据都被移动到拥有InnoDB存储引擎的事务性表中进行存储…

通义灵码获得国产 AI 编码工具最高成绩丨阿里云云原生 8 月产品月报

《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供…

执行yarn命令的时候报错: error Error: certificate has expired

完整错误:原因是:SSL证书过期 执行命令关闭验证: yarn config set strict-ssl false

《抽象代数》系列之群论入门

一、重要性 1.1 领域意义 群论是数学的一个分支,主要研究代数结构中的群、环、域等。尽管它看似抽象,但在编程领域,群论有着广泛的应用和深刻的意义。算法设计与优化:群论在算法设计中发挥着重要作用。例如,在密码学中,群论被用于设计安全的加密算法,如椭圆曲线密码学,…

【转】Chrome 的无头模式升级了:推出 --headless=new

Chrome的无头模式变得更好用了!本文概要介绍了近期的工程工作,让 Headless 更接近Chrome的常规“Headful”模式,让Headless对开发者更有用。 背景 早在 2017 年,Chrome 59 便引入了所谓的无头模式,可让您在没有任何可见界面的无人值守环境中运行浏览器。从本质上讲,就是在…

Hadoop(六)生产集群搭建(三)

完全分布式运行模式 一、群起集群 1、配置workers [user@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers在文件中添加如下内容: hadoop102 hadoop103 hadoop1042、启动集群 (1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode [user@hadoop…

延迟退休!我们又可以愉快的打工了

延迟退休! 我们又可以愉快的打工了希望可以活到办理退休那天🐸本文来自博客园,作者:bigroc,转载请注明原文链接:https://www.cnblogs.com/bigroc/p/18412267blog:http://www.bigroc.cn博客园:https://www.cnblogs.com/bigroc