[动态规划] LeetCode 2055. 蜡烛之间的盘子
LeetCode 2055 蜡烛之间的盘子
前言:
这个题做的时间略长了,开始的时候打算先定位两个端点的蜡烛,之后在遍历其中的盘子,结果不言而喻,必time limit了,之后就预处理了前x的蜡烛间盘子和前x存在的蜡烛,结果在最后处理数据时不能定位其中的蜡烛,然后就去看题解,结果是预处理分为左右情况(就是我之前没有有效定位需要选中的蜡烛的原因)
题目
给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符串 s ,它只包含字符 '' 和 '|' ,其中 '' 表示一个 盘子 ,'|' 表示一支 蜡烛 。
同时给你一个下标从 0 开始的二维整数数组 queries ,其中 queries[i] = [lefti, righti] 表示 子字符串 s[lefti...righti] (包含左右端点的字符)。对于每个查询,你需要找到 子字符串中 在 两支蜡烛之间 的盘子的 数目 。如果一个盘子在 子字符串中 左边和右边 都 至少有一支蜡烛,那么这个盘子满足在 两支蜡烛之间 。
比方说,s = "|||||" ,查询 [3, 8] ,表示的是子字符串 "||**|" 。子字符串中在两支蜡烛之间的盘子数目为 2 ,子字符串中右边两个盘子在它们左边和右边 都 至少有一支蜡烛。
请你返回一个整数数组 answer ,其中 answer[i] 是第 i 个查询的答案。
思路
求出i之前所有盘子,预处理盘子数,求出左右区间蜡烛(因为query为左右两个端点,所以当左侧端点在盘子上的时候需要找到其最右侧蜡烛即为有效蜡烛右侧同理)之后直接用预处理的数据带入左右蜡烛位置即可计算出答案。
LeetCode
public int[] platesBetweenCandles(String s, int[][] queries) {
int n = s.length();
int[] dp = new int[n];
Arrays.fill(dp,0);
for(int i=0,sum=0;i<n;i++){
if(s.charAt(i)=='*'){
sum++;
}
dp[i] = sum;
}
int[] left = new int[n];
int[] right = new int[n];
for(int i=0,l=-1;i<n;i++){
if(s.charAt(i)=='|'){
l = i;
}
left[i] = l;
}
for(int i=n-1,r=-1;i>=0;i--){
if(s.charAt(i)=='|'){
r = i;
}
right[i] = r;
}
int[] ans = new int[queries.length];
for(int i=0;i< queries.length;i++){
int[] query = queries[i];
int x = right[query[0]],y=left[query[1]];
ans[i] = x==-1||y==-1||x>=y?0:dp[y] - dp[x];
}
return ans;
}
[动态规划] LeetCode 2055. 蜡烛之间的盘子的更多相关文章
- 动态规划 两个字符串之间的编辑距离 leetcode72
public static int minDistance(String word1, String word2) { char[] s1 = word1.toCharArray(); char[] ...
- 由Leetcode详解算法 之 动态规划(DP)
因为最近一段时间接触了一些Leetcode上的题目,发现许多题目的解题思路相似,从中其实可以了解某类算法的一些应用场景. 这个随笔系列就是我尝试的分析总结,希望也能给大家一些启发. 动态规划的基本概念 ...
- [LeetCode] 198. 打家劫舍 ☆(动态规划)
描述 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个 ...
- leetcode组合总和 Ⅳ 解题路径
题目: 关于动态规划类题目的思路如何找在上一篇博客 https://www.cnblogs.com/niuyourou/p/11964842.html 讲的非常清楚了,该博客也成为了了leetcode ...
- leetcode探索中级算法
leetcode探索中级答案汇总: https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/ 1)数 ...
- leetcode计划(二)——ps:复习面试题计划+锻炼计划
5.24周日 下周是新的一周,发布任务 一.leetcode计划题目:300,416,494,474(前四个动态规划)(plus:860),232,225,155(后三个栈) 建议之后可以先做:cs- ...
- ACM金牌选手整理的【LeetCode刷题顺序】
算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...
- Elasticsearch--Logstash定时同步MySQL数据到Elasticsearch
新地址体验:http://www.zhouhong.icu/post/139 一.Logstash介绍 Logstash是elastic技术栈中的一个技术.它是一个数据采集引擎,可以从数据库采集数据到 ...
- MCP|LQ|DIAlignR provides precise retention time alignment across distant runs in DIA and targeted proteomics
文献名: DIAlignR provides precise retention time alignment across distant runs in DIA and targeted prot ...
随机推荐
- tabbar选中按钮的标题颜色和字体
@implementation XMGTabBarController /* 问题: 1.选中按钮的图片被渲染 -> iOS7之后默认tabBar上按钮图片都会被渲染 1.修改图片 2.通过代码 ...
- MyBatis加强(1)~缓存机制(一级缓存、二级缓存、第三方缓存技术redis、ehcache)
一.缓存机制 使用缓存可以使应用更快地获取数据,避免频繁的数据库交互操作,尤其是在查询越多,缓存命中率越高 的情况下,缓存的作用就越明显. 1.缓存原理:Map ■ 查询时,先从缓存区查询:找到,返回 ...
- PyTorch深度学习入门笔记(一)PyTorch环境配置及安装
@ 目录 一.工具安装 1.1 Anaconda 安装 1.2 Pytorch安装 二.编辑器安装 2.1 Pycharm安装 2.2 Jupyter安装 OS: ubuntu 20.04(虚拟机) ...
- 编译安装nginx,实现多域名 https
一.编译安装nginx 1.1 获取源码包 [root@cetnos7 ~]#wget -O /usr/local/src/nginx-1.18.0.tar.gz http://nginx.org/d ...
- Solution -「AGC 004E」「AT 2045」Salvage Robots
\(\mathcal{Description}\) Link. 有一个 \(n\times m\) 的网格.每个格子要么是空的,要么有一个机器人,要么是一个出口(仅有一个).每次可以命令所有机 ...
- Solution -「APIO/CTSC 2007」「洛谷 P3620」数据备份
\(\mathcal{Description}\) Link. 给定升序序列 \(\{x_n\}\) 以及整数 \(k\),在 \(\{x_n\}\) 中选出恰 \(k\) 对 \((x_i, ...
- 后台运行程序-服务器、python
0前言 最近遇到一个需求,我有一个很小的python程序,需要一直在服务器器上跑,但是我不想一直开着浏览器或者Xshell 7,所以记录一下怎么解决的. 用到的指令是nohup 具体代码就两行 sou ...
- 新手菜菜之2020Kubernetes详细介绍大全
前文 Kubernetes笔记(一):十分钟布置一套K8s环境 介绍了怎么快速建立一个k8s体系.为了持续运用k8s来布置咱们的应用,需要先对k8s中的一些根本组件与概念有个了解. Kubernete ...
- 关于tomcat 访问80端口失效 阿里云问题版
可能有朋友在配置完阿里云 配置好服务器发现 使用默认80端口访问网址失效 用8080依然失效 - -放心你用什么都会失效 并且你怎么杀接口也没用 答案就是 你的里面绝对没有80 和8080 你没 ...
- 一个命令让redis服务端所有信息无所遁形~(收藏吃灰系列)
1.info命令作用 在redis客户端执行INFO 命令以便于计算机解析和人工阅读的简单格式返回有关redis服务端的所有信息和统计数据. 可选参数可用于选择特定的信息部分: Server 服务器基 ...