当前位置: 首页 > 编程笔记 >

C ++中的最小加油站数

颛孙越
2023-03-14
本文向大家介绍C ++中的最小加油站数,包括了C ++中的最小加油站数的使用技巧和注意事项,需要的朋友参考一下

假设有一辆汽车,从起始位置行驶到距起始位置以东t英里的目的地。

现在,沿途有许多加油站。因此,每个加油站[i]代表加油站,该加油站位于起始位置以东的加油站[i] [0]英里处,并且该加油站的加油站数为[i] [1]升。

如果汽车以无限大的油箱启动,那么最初的油箱中将装有燃油。它每行驶1英里就消耗1升汽油。

当汽车到达一个加油站时,它可能会停止并加油,因此现在它将所有气体从加油站转移到汽车中。我们必须找到为到达目的地汽车必须进行的最少加油站次数?如果无法到达目的地,则返回-1。

因此,如果输入类似于Target = 100,startFuel = 20,stations = [10,40],[20,30],[30,20],[60,40],那么输出将为3。因此最初有10升汽油,到达第一个站后,它将传输40升天然气,所以当前有(0 + 40)= 40升天然气,然后到达第3站,现在传输20升天然气,所以当前数量是(20 + 20)= 40,然后到达最后一个站,取40升汽油,所以当前数量(10 + 40)= 50,到目前为止,我们已经覆盖了60英里,所以我们必须走40英里才能到达目的地,有足够的气体可以到达目标。

为了解决这个问题,我们将遵循以下步骤-

  • curr:= 0

  • 排序数组st

  • 定义优先级队列pq

  • i:= 0,cnt:= 0

  • curr:= curr +燃料

  • 而curr <target,做-

    • 从循环中出来

    • 将st [i,1]插入pq

    • (将i增加1)

    • (将cnt增加1)

    • while(i <st和st [i,0] <= curr的大小),执行-

    • 如果pq为空,则-

    • curr:= curr + pq的最高元素

    • 从pq中删除元素

    • 返回(如果curr> =目标,则为cnt,否则为-1)

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++++.h>
    using namespace std;
    class Solution {
       public:
       int minRefuelStops(int target, int fuel, vector<vector<int>> &st) {
          int curr = 0;
          sort(st.begin(), st.end());
          priority_queue<int> pq;
          int i = 0;
          int cnt = 0;
          curr += fuel;
          while (curr < target) {
             cnt++;
             while (i < st.size() && st[i][0] <= curr) {
                pq.push(st[i][1]);
                i++;
             }
             if (pq.empty())
                break;
             curr += pq.top();
             pq.pop();
          }
          return curr >= target ? cnt : -1;
       }
    };
    main(){
       Solution ob;
       vector<vector<int>> v = {{10,40},{20,30},{30,20},{60,40}};
       cout << (ob.minRefuelStops(100, 10, v));
    }

    输入值

    100, 10, {{10,40},{20,30},{30,20},{60,40}}

    输出结果

    3
     类似资料:
    • 你和你的朋友开车去提华纳度春假。你在为旅行存钱,所以你想把路上的油费降到最低。为了最小化你的汽油成本,你和你的朋友整理了以下信息。首先,你的汽车可以可靠地行驶m英里的油箱(但没有进一步)。你的一个朋友从网上挖掘了加油站的数据,并绘制了你路线上的每一个加油站,以及该加油站的汽油价格。具体而言,他们创建了一个从最近到最远的n+1个加油站价格列表,以及两个相邻加油站之间的n个距离列表。塔科马是0号加油站

    • 本文向大家介绍C ++中的最小时差,包括了C ++中的最小时差的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个“小时:分钟”格式的24小时制时钟点列表,我们必须找到列表中任何两个时间点之间的最小分钟差。因此,如果输入类似于[“ 12:30”,“ 15:17”],则返回167。 为了解决这个问题,我们将遵循以下步骤- 定义一个大小为24 * 60 + 1的名为ok的数组,并且最初都为假。 n

    • 本文向大家介绍C ++中最小K总和最短的子数组,包括了C ++中最小K总和最短的子数组的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数组A。我们必须找到A的最短,非空,连续子数组的长度,其总和至少为K。如果没有这样的子数组,则返回-1。 因此,如果输入类似于[5,3,-2,2,1]且k = 6,则输出将为2,如我们所见(5 + 3)> = 6 为了解决这个问题,我们将遵循以下步骤- n:

    • 我正在编写一个代码,用户会被问到:“有多少个标记?”然后他们输入他们提到的分数。然后,它打印出最大标记和最小标记。 我不是最擅长编码的,所以我没有方向去寻找循环中的最大值和最小值。我找到了他们能够输入标记的部分,但我不确定如何找到最大值和最小值。我查找了如何进行最大值和最小值,但它通常显示为在数组中查找最大值和最小值,这不是我想要做的。

    • 本文向大家介绍C#获取数组中最大最小值的方法,包括了C#获取数组中最大最小值的方法的使用技巧和注意事项,需要的朋友参考一下 根据下面函数获取数组中最大最小值即可。调用时候直接传数组范围一个float类型的变量  

    • 问题内容: 我有一个maxmemory_human 6.05 G和used_memory_human的Redis集群:4.62M 我想用转储数据来补充这个used_memory_human,所以我将有2G的used_memory_human 我该怎么办? 问题答案: 填充 used_memory_human:1.81G 清洁 used_memory_human:574.41K