每日AC- 美团 -- 直方图中最大矩形 与最少字符使字符串变成回文字符串
来源:互联网 发布:广州qt场及js汇总贴吧 编辑:程序博客网 时间:2024/05/16 02:13
直方图中最大矩形
题目描述
有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。
给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
测试样例:
[2,7,9,4,1],5
返回:14
A了一票水题,所以很长时间没发博客,也是因为最近实在是忙的原因。 加上最近感冒发烧..... 总之贵在坚持。
解题思路:
先是一个矩形 , 再每次和前面一个 组成矩形 2个矩形, 取高度最小的直方图 作为高 ;再再加上前面一个作为矩形,3个直方图 然后 取最小的直方图作为高
看AC代码:
import java.util.Stack;/** * 类说明 * * <pre> * Modify Information: * Author Date Description * ============ =========== ============================ * DELL 2017年7月14日 Create this file * </pre> * */public class MaxInnerRec { public int countArea(int[] A, int n) { int max = 0; for(int j = 0; j < n ;j++){ //想了一会, 觉得确实不有点棘手 怎么说呢 ,看怎么算了 int min = 99999999; for(int i = j; i>=0; i--){ /* * 栗子 * 2 7 9 4 * 2 开始 前面 无直方图 * 2*1 = 2 min = 2 max = 2; * 7*1 = 7 // 第一个循环 A[i] = 7 min = 2 min = 2 max = 7 //第二个循环 A[i] = 2 min = 2 2*2 = 4 max = 7; * 9开始 就有三种情况 有直方图 9 7*2 2*3 * 4有四种情况 2*4 */ min = Math.min(min, A[i]); //找到当前直方图和其前面直方图最低的那个 max = Math.max(max, (j-i+1)*min); } } return max; // write code here } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] A={2,7,9,4}; int n = 4; int ans = new MaxInnerRec().countArea(A, n); System.out.println(ans); }}
回文字符串:
/** * 类说明 * * <pre> * Modify Information: * Author Date Description * ============ =========== ============================ * DELL 2017年8月31日 Create this file * </pre> * */public class HuiWenZiCHuan { /** * @param args 回文字符串 时间限制:3000 ms | 内存限制:65535 KB * 难度:4 * 描述 * 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的 * ,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串 * 。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。 输入 * 第一行给出整数N(0<N<100) 接下来的N行,每行一个字符串,每个字符串长度不超过1000. 输出 每行输出所需添加的最少字符数 * 样例输入 1 Ab3bd 样例输出 2 */ public static void main(String[] args) { String str = "Ab3bd"; int ans = getMinChar(str.toCharArray()); System.out.println(ans); } /** * @param str * @return */ private static int getMinChar(char[] str) { int len = str.length; int[][] dp = new int[len+1][len+1]; for(int i = 0; i < len; i++){ for(int j = len-1; j >=0; j--){ int k = len -j-1; if(str[i] == str[j]){ dp[i+1][k+1] = dp[i][k] +1; }else{ dp[i+1][k+1] = (dp[i+1][k]>dp[i][k+1])?dp[i+1][k]:dp[i][k+1]; } } } return len-dp[len][len]; }}
阅读全文
0 0
- 每日AC- 美团 -- 直方图中最大矩形 与最少字符使字符串变成回文字符串
- 添加最少字符使成为回文字符串
- 添加最少的字符使整体字符串都是回文字符串
- 一个字符串要变成回文串的需要添加的字符最少个数
- 美团 直方图内最大矩形
- 美团-直方图内最大矩形-Java
- 【美团】直方图内最大矩形
- 插入最少的字符使字符串成为回文
- 添加最少字符数构成使字符串构成回文
- 添加最少的字符使字符串成为回文
- 删除最少字符 使字符串成为回文串
- 插入最少字符使字符串回文(LCS,DP)
- 插入最少的字符使字符串成为回文串
- STL学习-字符串回文判断以及实现删除字符串中重复字符最少字符
- 字符串问题---添加最少字符使字符串整体都是回文字符串
- <每日一题>最大回文子字符串
- 删除字符串中最少字符
- 算法:动态规划——区间模型之最少添加几个字符使得字符串变成回文串
- 天池离线赛
- non-blocking I/O Multiplexing + poll/epoll 的正确使用
- 盒子模型
- 在Ubuntu下编译FFmpeg
- java调用python文件之第三方包路径
- 每日AC- 美团 -- 直方图中最大矩形 与最少字符使字符串变成回文字符串
- カレンダDATA型⇒String
- mysql授权
- navicat11激活教程
- 在Ubuntu下利用Eclipse开发FFmpeg配置小结
- 什么是依赖注入
- python爬虫框架-Scrapy安装详细教程
- Pro Git(中文版)
- ZOJ1053-FDNY to the Rescue!(图论之最短路)