2055. 蜡烛之间的盘子

给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符串 s ,它只包含字符 '*' 和 '|' ,其中 '*' 表示一个 盘子 ,'|' 表示一支 蜡烛 。

同时给你一个下标从 0 开始的二维整数数组 queries ,其中 queries[i] = [lefti, righti] 表示 子字符串 s[lefti...righti] (包含左右端点的字符)。对于每个查询,你需要找到 子字符串中 在 两支蜡烛之间 的盘子的 数目 。如果一个盘子在 子字符串中 左边和右边 都 至少有一支蜡烛,那么这个盘子满足在 两支蜡烛之间 。

比方说,s = "||**||**|*" ,查询 [3, 8] ,表示的是子字符串 "*||**|" 。子字符串中在两支蜡烛之间的盘子数目为 2 ,子字符串中右边两个盘子在它们左边和右边 都 至少有一支蜡烛。
请你返回一个整数数组 answer ,其中 answer[i] 是第 i 个查询的答案。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/plates-between-candles
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 首先要确定查询区间内位于最左侧和最右侧的蜡烛位置,即 left 右侧(包括 left) 最近的蜡烛位置,以及 right 左侧(包括 right) 最近的蜡烛位置。这里我们分别用两个辅助数组 lcandle 和 rcandle 来记录,其中,lcandle[i] 表示在位置 i 左侧(包括 i ),离 i 最近的蜡烛的位置,rcandle[i] 表示在位置 i 右侧(包括 i ),离 i 最近的蜡烛的位置。
  • 然后,当我们找到查询区间内最左侧和最右侧的两个蜡烛的位置 lidx 和 ridx 之后,如果我们知道,在 lidx 和 ridx 之前分别有多少个盘子的话,那么在 lidx 和 ridx 之间的盘子个数(即查询区间内两个蜡烛之间的盘子个数)即为二者之差。这里我们使用第三个辅助数组 prefix_plate 来记录每个位置之前的盘子个数,即 prefix_plate[i] 表示在位置 i 之前的盘子个数。
  • 最后,我们由 prefix_plate 得到查询区间最左侧蜡烛位置 lidx 和最右侧蜡烛位置 ridx 之前的盘子个数分别为 prefix_plate[lidx] 和 prefix_plate[ridx],那么在 lidx 和 ridx 之间的盘子个数,即查询区间内两个蜡烛之间的盘子个数为 prefix_plate[ridx] - prefix_plate[lidx]
    class Solution {
        public int[] platesBetweenCandles(String s, int[][] qs) {
            char[] cs = s.toCharArray();
            int n = cs.length, m = qs.length;
            int[] l = new int[n], r = new int[n];
            int[] sum = new int[n + 1];
            for (int i = 0, j = n - 1, p = -1, q = -1; i < n; i++, j--) {
                if (cs[i] == '|') p = i;
                if (cs[j] == '|') q = j;
                l[i] = p; r[j] = q;
                sum[i + 1] = sum[i] + (cs[i] == '*' ? 1 : 0);
            }
            int[] ans = new int[m];
            for (int i = 0; i < m; i++) {
                int a = qs[i][0], b = qs[i][1];
                int c = r[a], d = l[b];
                if (c != -1 && c <= d) ans[i] = sum[d + 1] - sum[c];
            }
            return ans;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中可以使用多种库来绘制蜡烛图,其中比较常用的是matplotlib和plotly库。下面是使用这两个库来绘制蜡烛图的简单介绍: 1. 使用matplotlib库绘制蜡烛图: 首先,你需要安装matplotlib库。然后,可以按照以下步骤来绘制蜡烛图: - 导入所需的库和模块: ```python import matplotlib.pyplot as plt from mpl_finance import candlestick_ohlc import pandas as pd import datetime as dt ``` - 准备数据: ```python # 创建一个包含日期、开盘价、最高价、最低价和收盘价的DataFrame data = {'date': [dt.datetime(2021, 1, 1), dt.datetime(2021, 1, 2), ...], 'open': [100, 110, ...], 'high': [120, 130, ...], 'low': [90, 100, ...], 'close': [110, 120, ...]} df = pd.DataFrame(data) ``` - 绘制蜡烛图: ```python # 将日期转换为matplotlib可识别的格式 df['date'] = df['date'].map(dt.datetime.toordinal) # 创建一个子图 fig, ax = plt.subplots() # 绘制蜡烛图 candlestick_ohlc(ax, df.values, width=0.6, colorup='green', colordown='red') # 设置x轴标签为日期 ax.xaxis_date() # 设置x轴标签旋转45度 plt.xticks(rotation=45) # 显示图形 plt.show() ``` 2. 使用plotly库绘制蜡烛图: 首先,你需要安装plotly库。然后,可以按照以下步骤来绘制蜡烛图: - 导入所需的库和模块: ```python import plotly.graph_objects as go import pandas as pd ``` - 准备数据: ```python # 创建一个包含日期、开盘价、最高价、最低价和收盘价的DataFrame data = {'date': [dt.datetime(2021, 1, 1), dt.datetime(2021, 1, 2), ...], 'open': [100, 110, ...], 'high': [120, 130, ...], 'low': [90, 100, ...], 'close': [110, 120, ...]} df = pd.DataFrame(data) ``` - 绘制蜡烛图: ```python # 创建一个蜡烛图对象 fig = go.Figure(data=[go.Candlestick(x=df['date'], open=df['open'], high=df['high'], low=df['low'], close=df['close'])]) # 设置x轴标签为日期 fig.update_xaxes(type='category') # 显示图形 fig.show() ``` 这些是使用matplotlib和plotly库绘制蜡烛图的简单介绍。你可以根据自己的需求和喜好选择适合的库来绘制蜡烛图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值