【LeetCode】十三、分治法:多数元素 + 最大子序列和

文章目录

  • 1、分治法
  • 2、leetcode169:多数元素
  • 3、leetcode53:最大子序和

1、分治法

分治一般都搭配递归使用:

在这里插入图片描述

在这里插入图片描述

用分治法的一个应用——归并排序:将一组数不停的一分为二,直到分到每组只有一个数的时候

在这里插入图片描述

分到每组只有一个数的时候,到达递归终止的条件(把一个排序的大问题,分成了少量元素排序的小问题),开始倒着往回退,每层分别排序各自组里的数据,即小问题的解

在这里插入图片描述

组合小问题的解,就是最终的排序结果。比较左右两个小问题的解(有序数列)的首元素,每次比较拿出小的那个首元素放入最终的结果。 因此说:左右两边分别是有序的,那把它两合并成一个新的有序的结果是更容易的。

2、leetcode169:多数元素

在这里插入图片描述

这题本质还是要用到元素出现的次数,也就是要统计次数,首先用HashMap的数据结构,就可以解决

这里用分治法解决一下:把一组数分成一个个不可再分的元素(分治法里所说的小问题),再分别求众数,往上开始一层回退递归,如果左边有一半以上的数是n,右边也有一半以上的数是n,那左右两边合并后,多数元素就也是n。

为什么可以用分治,因为,如果a是数组num的众数,那么将num一分为二后,至少有一边的众数也是a,因此分治得到的最终的结果是正确的。

其次,每次左右两边的众数如果相等,则这一个区间的众数就是该值,反之,左右两边的众数值不一样,那就要比较这两个众数在区间里出现的次数,来决定选谁,如果连出现的次数也一样,那就随机取一个。

举例:
在这里插入图片描述

代码实现:

public class P169 {public static int majorityElement(int[] nums) {return getMajority(nums, 0, nums.length - 1);}public static int getMajority(int[] nums, int left, int right) {// 数组只有一个元素了,不可再分,到达递归的终止条件if (left == right) {return nums[left];}// 一分为二,获取左右两边的多数元素int mid = left + (right - left) / 2;int leftMajority = getMajority(nums, left, mid);int rightMajority = getMajority(nums, mid + 1, right);if (leftMajority == rightMajority) {return leftMajority;}// 左右两边的多数元素结果不相等,统计次数int leftCount = 0;int rightCount = 0;for (int i = left; i <= right; i++) {if (nums[i] == leftMajority) {leftCount++;}if (nums[i] == rightMajority) {rightCount++;}}return leftCount >= rightCount ? leftMajority : rightMajority;}
}

3、leetcode53:最大子序和

在这里插入图片描述

这题,是定长的子数组的话,那就是一个滑动窗口。现在不定长,可以这样想:如果前面一串的和小于0,那我再要他们和我加一起的话,只会让我越来越小,形象的说,过去那一串整体就是累赘,应该从我这儿重新开始累加。

反之,前面那一串的和大于0,那说明祖上有家产,不论多少,继承过来继续累加。前面那一串的和大于0,说明不管那一串有几个正数几个负数(几个挣钱的、几个败家的),传到我这儿总是有剩余钱的,没有负债,那就继承。

这题,不是区分哪一个元素是正数或负数,就来决定是丢是留,而是从一段上来看,是正的还是负的,比如:11,-10,999,不能一见到-10就把11也扔了,整体 > 0就可以累加

public class P53 {public static int maxSubArray(int[] nums) {if (null == nums || nums.length == 0) {return 0;}// 不能赋值0,否则,nums = {-1}时,有bug:和为-1,输出0int result = nums[0];int pre = 0;for (int num : nums) {// 如果过去前面那一串的和小于0,是累赘,那我就从自己这儿重新开始if (pre < 0) {pre = num;} else {// 如果过去前面那一串的和大于0,说明家里祖上有点家产,那就继承pre = pre + num;}// 每处理一个元素,覆盖下最值result = Math.max(result, pre);}return result;}
}

再用分治法解决一次。可以看到,一组数一分为二,其序列和的最大值可能出现在三个地方:左侧、中间(横跨左右)、右侧。

图解下,左右两边的最大序列和与最终的结果对比如下:发现最终的结果可能是左侧最大值、右侧最大值、左侧+右侧

在这里插入图片描述

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

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

相关文章

Python28-7.5 降维算法之t-分布邻域嵌入t-SNE

t-分布邻域嵌入&#xff08;t-distributed Stochastic Neighbor Embedding&#xff0c;t-SNE&#xff09;是一种用于数据降维和可视化的机器学习算法&#xff0c;尤其适用于高维数据的降维。t-SNE通过将高维数据嵌入到低维空间&#xff08;通常是二维或三维&#xff09;中&…

git github gitee 三者关系

Git&#xff1a; Git 是一个分布式版本控制系统&#xff0c;用于跟踪源代码的更改。它由 Linus Torvalds 于 2005 年开发&#xff0c;目的是更好地管理 Linux 内核开发。Git 是一个命令行工具&#xff0c;具有以下特点&#xff1a; 分布式&#xff1a;每个开发者的工作目录都是…

【深度学习】什么是交叉注意力机制?

文章目录 区别传统的自注意力机制交叉注意力机制区别总结应用实例自注意力机制的应用&#xff1a;交叉注意力机制的应用&#xff1a; 代码自注意力机制的实现交叉注意力机制的实现说明 交叉注意力机制的发展趋势 区别 交叉注意力机制&#xff08;Cross-Attention Mechanism&am…

【Git】入门到专家,Git手动配置Config脚本

为什么要手动配置脚本 手动配置脚本&#xff0c;好比是一个专家模式&#xff0c;它能加深你对Git的理解 如果纯粹复制粘贴网上的指令&#xff0c;不懂得其中原理&#xff0c;项目一多&#xff0c;仓库一多&#xff0c;发生冲突时自己就没法解决 Git的脚本非常简单&#xff0…

【php相关总结】

php相关总结 一、分库分表 垂直拆分和水平拆分 垂直拆分&#xff1a; 1.大表拆小表&#xff0c;常用的字段单独拆分出来&#xff0c;直接访问小表 2.每个库表不一样&#xff0c;但是有一个相同的外键关联 水平拆分&#xff1a; 1.hash取模拆分。 2.每个库表结构都一样&#xf…

Edge浏览器油猴插件的安装与使用

油猴 (又称篡改猴或Tampermonkey) 是最流行的浏览器扩展之一。它允许用户自定义并增强网页的功能。用户脚本是小型 JavaScript 程序&#xff0c;可用于向网页添加新功能或修改现有功能。使用油猴&#xff0c;您可以轻松在任何网站上创建、管理和运行这些用户脚本。 1.插件的安…

【数据结构与算法】希尔排序

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​

Vue的学习之模板语法(指令)

一、指令 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Vue的学习</title><script src"vue.js" type"text/javascript" charset"utf-8"></script></head><bo…

KIVY Camera¶

Camera — Kivy 2.3.0 documentation Camera 相机 Jump to API ⇓ Module: kivy.uix.camera Added in 1.0.0 The Camera widget is used to capture and display video from a camera. Once the widget is created, the texture inside the widget will be automatically u…

关于新装Centos7无法使用yum下载的解决办法

起因 之前也写了一篇类似的文章&#xff0c;但感觉有漏洞&#xff0c;这次想直接把漏洞补齐。 问题描述 在我们新装的Centos7中&#xff0c;如果想要用C编程&#xff0c;那就必须要用到yum下载&#xff0c;但是&#xff0c;很多新手&#xff0c;包括我使用yum下载就会遇到一…

mupdf加载PDF显示中文乱码

现象 加载PDF显示乱码,提示非嵌入字体 non-embedded font using identity encoding调式 在pdf-font.c中加载字体 调试源码发现pdf文档的字体名字居然是GBK&#xff0c;估计又是哪个windows下写的pdf生成工具生成pdf 字体方法&#xff1a; static pdf_font_desc * load_cid…

用QFramework重构飞机大战(Siki Andy的)(下01)(06-0? 游戏界面及之后的所有面板)

GitHub // 官网的 全民飞机大战&#xff08;第一季&#xff09;-----框架设计篇&#xff08;Unity 2017.3&#xff09; 全民飞机大战&#xff08;第二季&#xff09;-----游戏逻辑篇&#xff08;Unity 2017.3&#xff09; 全民飞机大战&#xff08;第三季&#xff09;-----完善…

解锁高效软件测试:虚拟机助力提升测试流程的秘诀

众所周知&#xff0c;软件测试在软件开发生命周期中至关重要。它确保软件符合要求&#xff0c;没有漏洞&#xff0c;并帮助开发人员优化性能&#xff0c;验证项目功能。 然而&#xff0c;测试可能既耗时又耗费资源&#xff0c;特别是当需要在不同操作系统和配置上测试软件组件…

Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇

Nginx七层&#xff08;应用层&#xff09;反向代理 HTTP反向代理proxy_pass篇 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of thi…

Python3极简教程(一小时学完)中

异常 在这个实验我们学习 Python 的异常以及如何在你的代码中处理它们。 知识点 NameErrorTypeError异常处理&#xff08;try..except&#xff09;异常抛出&#xff08;raise&#xff09;finally 子句 异常 在程序执行过程中发生的任何错误都是异常。每个异常显示一些相关…

07-7.2.1 顺序查找

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

Word使用中的一些烦人的小问题

文章目录 前言一、表格满一页后再插入行无法显示二、文字显示半截 前言 使用word的时候有一些莫名其妙的情况出现&#xff0c;想问度娘还很难用文字来描述问题&#xff0c;随时记录一下方便以后看 一、表格满一页后再插入行无法显示 点击表格左上方的全选按钮&#xff0c;下一…

fasttext工具介绍

fastText是由Facebook Research团队于2016年开源的一个词向量计算和文本分类工具。尽管在学术上并未带来巨大创新&#xff0c;但其在实际应用中的表现却非常出色&#xff0c;特别是在文本分类任务中&#xff0c;fastText往往能以浅层网络结构取得与深度网络相媲美的精度&#x…

长沙理工大学本科毕业论文(Latex模板)补充

&#x1f388;&#x1f388;&#x1f388;本模板不是原创&#xff0c;来自于github公开的项目。 具体链接是https://github.com/csust-latex-sig/CSUSTBachelorThesis 某大佬开源的&#xff0c;我用了之后做了点补充说明。&#xff08;&#x1f61d;&#xff09; 一、Latex的安…

用GPT做足球预测案例分享

自从GPT出来后&#xff0c;一直想利用GPT的能力做点什么&#xff0c;想了很多项目&#xff0c;比如用GPT写小说&#xff0c;用GPT做股票分析&#xff0c;用GPT写营销文章&#xff0c;最终我选了一个比较有意思的方向&#xff1a;GPT足球预测。因为每天都有足球比赛&#xff0c;…