热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

冒泡排序_深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和

本文由编程笔记#小编为大家整理,主要介绍了深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和相关的知识,希望对你有一定的参考价值。



















gaominginterview













加关注
























深入理解一趟冒泡排序的本质









深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和


场景回顾




深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和










在一个大矩阵中求一个最大的二维矩阵。其实就是在一个二维数组中找到一个X, Y使得(X,Y),(X, Y+1),(X+1, Y),(X+1, Y+1) 组成的和比其他的任何类似的子数组都大。




















深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和























这里有一个例子, 在矩阵中:


1 2 0 3 4


2 3 4 5 1
1 1 5 3 0
中最大的二维矩阵是:
4 5


5 3

















深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和


























好了,大家理解了大矩阵的其实就是一个二维数组,而二维矩阵其实就是由点 (X,Y)向右、向下构成的四个点的子数组。没毛病对吗? 看下这张图,你会更加直观。











深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和







深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和


分析问题




深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和













1. 紫色红色块部分是最大的和,


2. 蓝色块也会构成四个数的和,不是最大的,


3. 这样的X,Y其实就限定在红色区域里

















深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和


解题思路




深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和
















深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和























那怎么解决这样一道问题呢?我们分析下两个思路,之后我们再挖掘下题目的本质:



  1. 我们把每个点(X, Y)以及由 该点出发构成的四个点的和都求出来,之后我们再扫描下结构,找最大的数。我们是不是就可以求出来了呢?


    如果是这样的话,我们可以构造一个一维数组就好了,这个数组中保存的就是由(X,Y)点出发而构成的四个数的和。而我们可以从下表中求出(X,Y),我们用i来表示下标,则有  x = i / 数组的第二维长度, Y = i - X * 数组的第二位长度。需要注意的是, 此时 X的最大值等于 数组的一唯长度 - 2, 而Y 的最大值等于数组的二维长度 -2;


  2. 大家看明白了第一种思路之后,是不是可以再做一些优化。我们真的需要把每个长度都求出来吗?


















深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和





























问题的本质是什么?











一趟冒泡,求最大值!!!








深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和




















该题的本质,其实就是一趟冒泡排序,找出最大值。对不对?














这是思路1 的本质。在思路2中我们同样使用这样的思路,只是更加深刻的理解它,我们只需两两比较,每次保存最大的值作为哨兵就好了。不太理解的同学建议查看原文系统学习排序专题。












深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和


一起写代码




深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和







深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和







深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和


测试结果




深入理解一趟冒泡排序的本质,解决二维数组中求子数组最大和
















最后希望大家在学习的数据结构与算法的道路上越走越远,越来越顺畅。























查看原文


获取更多专题课程










































点击“阅读原文”打开新页面










推荐阅读
  • 外层|条件下_MySQL还能这样玩第五篇之视图应该这样玩
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL还能这样玩---第五篇之视图应该这样玩相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 在实际开发中,现在安卓端和后台之间的数据交互,一般都是用JSON来传递数据信息。JSON大家一般都比较熟悉。我这边就以实际项目中的后台传过来的情况和大家分析下及如何处理。比如后台返 ... [详细]
  • flash代码_正点原子【STM32F407探索者】第三十九章 FLASH 模拟 EEPROM 实验
    1)资料下载:点击资料即可下载2)对正点原子Linux感兴趣的同学可以加群讨论:9354467413)关注正点原子公众号,获取最新资料更新 ... [详细]
  • java怎么实现非下降数组
    今天小编给大家分享一下java怎么实现非下降数组的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给 ... [详细]
  • 局限性_Scrum框架的局限性
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Scrum框架的局限性相关的知识,希望对你有一定的参考价值。在很多工作坊的讨论中, ... [详细]
  • rtemsapi用户指南Elixir代表了相对较新的编程语言,面向更广泛的受众。它于2011年发布,此后一直在开发中。他的主要特征是取消功能范式 ... [详细]
  • DFS基本概念步骤优缺点典型例题递推基本概念直接或者间接调用自身的算法称为递归算法一般数据n ... [详细]
  • 编程语言是从哪蹦出来的——大型伦理寻根现场
    Hello,我是Alex007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫Alex的人太多了,再加上每天007的生活,Alex007就诞生了。聊一聊编程到底是啥,怎 ... [详细]
  • 我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ... [详细]
  • 本文目录一览:1、《C语言程序设计第四版》pdf下载在线阅读全文,求百度网盘云资源 ... [详细]
  • 我理解ViewHolder的onBindViewHolder如何工作,但是我不清楚notifyItemRangeChanged(0,this.data.size())如何;适用于此示例以及它的确 ... [详细]
  • iic协议
    IIC简介IIC,Inter-IntegratedCircuit,集成电路总线,需要2根线连接拓扑,是半双工,适用于”字节型”设备。I2C总线物理拓扑结构IIC通信原理: 通过对S ... [详细]
  • Java的核心库提供了大量的现成的类供我们使用。本节我们介绍几个常用的工具类。Math顾名思义,Math类就是用来进行数学计算的,它提供了大量的静态 ... [详细]
  • 这篇文章将为大家详细讲解有关C#开发技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C#开发技 ... [详细]
  • JNI技术实践小结转自http:sett ... [详细]
author-avatar
手机用户2702938564
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有