zoukankan      html  css  js  c++  java
  • LeetCode5667. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?

    题目

    分析(按照y总思路)

    首先先将题目进行转化,因为题目要求:在吃完 所有 第 i - 1 类糖果之前,不能 吃任何一颗第 i 类糖果。所以我们把已有的糖果种类糖果数看成一个线性数轴,如下:

     只有数轴左边糖果吃完,才可以吃右边的糖果。接下来把能不能在给定的天数吃到某类的糖果这一问题转换为能不能在给定的天数吃到编号为X的糖果。就是从区间问题降到某个点的问题。

     查看第d天能够吃到的糖果编号和第t种糖果的编号这两个区间是否有交集。求解第 t 种糖果的编号区间就是 求解前缀和问题。

    代码

     1 typedef long long LL;
     2 class Solution {
     3 public:
     4     //判断区间有没有交点
     5     bool check(LL a,LL b,LL c,LL d){  //[a,b][c,d]
     6         if(b < c || d < a ) return false;
     7         return true;
     8     }
     9     vector<bool> canEat(vector<int>& w, vector<vector<int>>& queries) {
    10         int n = w.size();
    11        vector<LL>s(n+1);//糖果种类数量的前缀和数组
    12        for(int i = 1;i <= n;i++) s[i] = s[i-1] + w[i-1];  //从1开始,w加偏移量-1
    13        vector<bool>res;
    14        for(auto& q : queries){
    15            int t = q[0], d = q[1],c = q[2];
    16            res.push_back(check(d+1,LL(d+1)*c,s[t]+1,s[t+1]));
    17        }
    18        return res;
    19     }
    20 };

    数据范围10的5次方,前缀和数组可能会爆int

  • 相关阅读:
    NSSM 将jar 安装成windows服务
    Spark Streaming
    记录一次oracle的坑 ORA08103
    POJ 3669 Meteor Shower
    LeetCode题目1~3
    POJ 3723 Conscription 并查集 + Kruskal
    LeetCode题目4:Sort List
    C++实现的快速排序
    C++实现的一段希尔排序代码
    2014大众点评Hackathon参赛感想
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14353356.html
Copyright © 2011-2022 走看看