当前位置: 首页 > news >正文

关于二维数组求解面积的问题

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、刷的一道题

      二维数组用0,1(0=空的,1=面积存在)填充,那么要求解一个最大的面积


0 0 0 0 0     0 0 0 0 0
1 1 0 1 1 =》 1 1 0 1 1
0 1 1 1 1     0 2 1 2 2 
1 1 1 1 1     1 3 2 3 3
    这道题按照网上的做法就是 上图的改变 转换为列的图形

    然后在每次计算可能的一个最大面积

    保留一个最大的面积

下面是代码


public int maximalRectangle(char[][] matrix) {
			int m=matrix.length;
			if(m==0)return 0;
			
			int n=matrix[0].length;
			int area=matrix[0][0]-'0';
			
			//建立一个柱形图
			for(int i=1;i<m;i++)
				for(int j=0;j<n;j++){
					if(matrix[i][j]=='0')
						continue;
					else
						matrix[i][j]=(char) (matrix[i-1][j]+1);
		   }
			
			//获取面积
		   for(int i=0;i<m;i++)
			 for(int j=0;j<n;j++){
				if(matrix[i][j]=='0'){
					continue;
				}else{
					int min=matrix[i][j]-48;
					int k=j;
					for(;k<n;k++){
						if(matrix[i][k]=='0')
							break;
						else{
							if(min>matrix[i][k]-'0')
								min=matrix[i][k]-'0';
						   
							if(area<min*(k-j+1)){
								area=min*(k-j+1);                   					
							}	
						}
					}
				}
			}
		   return area;
	}
上图代码的求面积的算法 是个迭代的遍历每一个都遍历一次

二、刷的另一道题

      直接求解代码 列状图的最大面积 那么用上面的遍历后会超时的


public int largestRectangleArea(int[] height) {
    	  
    	  if(height.length==0)return 0;
          
    	  int max=height.length;
    	  
          for(int i=0;i<height.length;i++){
               if(height[i]==1){
            	   continue;
               }
        	  
        	  int minHeight=height[i];
        	  int j=i;
        	  for(;j<height.length;j++){
        		  if(height[j]<minHeight)
        			  minHeight=height[j];
        		  if(max<minHeight*(j-i+1))
        			  max=minHeight*(j-i+1);
        	  }
          }
          return max;
      }
            第二种做法是什么那?

一个递增的柱状图他们求解一个最大的值

寻找每一个峰值,然后求解,抄的 然后这部分高的和后面的比较没意思了,比较低的就可以了。



if(height.length==0){
		         return 0;
	     }
    	  Stack<Integer> stack=new Stack<Integer>();
    	 
    	  int max=0;
    	  int rightarea=0;
    	  int i=0;
    	  for(;i<height.length;i++){
    		  while(!stack.empty()&&height[stack.peek()]>height[i]){
    	            int index=stack.pop().intValue();

    	            rightarea=(stack.empty()?i:i-stack.peek()-1)*height[index];
    	            
    	            if(rightarea>max)max=rightarea;
    		  }
    		  stack.add(new Integer(i));
    	  }
    	  
    	  while(!stack.empty()){
	            int index=stack.pop().intValue();
	            rightarea=(stack.empty()?i:i-stack.peek()-1)*height[index];
	            if(rightarea>max)max=rightarea;
		  }
    	  return max;

三、刷的另一道题容器雨滴

来回扫描两次,取最小值就可以了。



转载于:https://my.oschina.net/findurl/blog/391562

相关文章:

  • 算法设计 - LCS 最长公共子序列最长公共子串 LIS 最长递增子序列
  • Linux下搭建gtk+2.0开发环境
  • ThreadPoolExecutor使用介绍
  • nginx参考时间模型和几种常见的I/0模型
  • 搭建项目自动化框架的搭建、改进与思考
  • 54.使用$.extend()扩展Object对象
  • Java数据库表自动转化为PO对象
  • 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法
  • QNAP TS-219P NAS容量扩充
  • jQuery File Upload 判断图片尺寸,限定图片宽高的办法
  • iOS:申请google map key--不要忘了×××
  • shell中检查某个命令是否存在
  • linux apache工作模式:prefork和worker详解
  • Excel中日期相减除去周六周日求算法
  • 基于动态基线的业务运营支撑网异常流量检测研究
  • Android优雅地处理按钮重复点击
  • ES2017异步函数现已正式可用
  • ES学习笔记(12)--Symbol
  • Go 语言编译器的 //go: 详解
  • JavaScript中的对象个人分享
  • Map集合、散列表、红黑树介绍
  • React-flux杂记
  • SpringBoot几种定时任务的实现方式
  • SQLServer插入数据
  • yii2权限控制rbac之rule详细讲解
  • 程序员最讨厌的9句话,你可有补充?
  • 前端之Sass/Scss实战笔记
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 扩展资源服务器解决oauth2 性能瓶颈
  • #include
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (MATLAB)第五章-矩阵运算
  • (十六)串口UART
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一一四)第九章编程练习
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .Net Core 中间件验签
  • .NET Standard 的管理策略
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • ::before和::after 常见的用法
  • @Data注解的作用
  • @javax.ws.rs Webservice注解
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [2018-01-08] Python强化周的第一天
  • [20190416]完善shared latch测试脚本2.txt
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [javaSE] 看知乎学习工厂模式
  • [leetcode 数位计算]2520. 统计能整除数字的位数
  • [LeetCode]-使用特殊算法的题目-2