2008. 出租车的最大盈利 --力扣 --JAVA

简介: 你驾驶出租车行驶在一条有 n 个地点的路上。这 n 个地点从近到远编号为 1 到 n ,你想要从 1 开到 n ,通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向。乘客信息用一个下标从 0 开始的二维数组 rides 表示,其中 rides[i] = [starti, endi, tipi] 表示第 i 位乘客需要从地点 starti 前往 endi ,愿意支付 tipi 元的小费。每一位 你选择接单的乘客 i ,你可以 盈利 endi - starti + tipi 元。你同时 最多 只能接一个订单。给你 n 和 rides ,请你返回在最优接单方案下,你能盈利 最

 题目

你驾驶出租车行驶在一条有 n 个地点的路上。这 n 个地点从近到远编号为 1n ,你想要从 1 开到 n ,通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向。

乘客信息用一个下标从 0 开始的二维数组 rides 表示,其中 rides[i] = [starti, endi, tipi] 表示第 i 位乘客需要从地点 starti 前往 endi ,愿意支付 tipi 元的小费。

每一位 你选择接单的乘客 i ,你可以 盈利endi - starti + tipi 元。你同时 最多 只能接一个订单。

给你 nrides ,请你返回在最优接单方案下,你能盈利 最多 多少元。

注意:你可以在一个地点放下一位乘客,并在同一个地点接上另一位乘客。

解题思路

    1. 根据每段路程的终点进行统计记录;
    2. 记录每个位置能产生的最大收益,将数据归到终点n;

    代码展示

    class Solution {
        public long maxTaxiEarnings(int n, int[][] rides) {
          Map<Integer,List<int[]>> groups = new HashMap<>();
            for (int[] r : rides){
                int start = r[0];
                int end = r[1];
                int tip = r[2];
                List<int[]> group = groups.getOrDefault(end, new ArrayList<>());
                group.add(new int[]{start, end - start + tip});
                groups.put(end, group);
            }
            long[] profits = new long[n + 1];
            profits[0] = 0;
            profits[1] = 0;
            //1的位置不会有人下车,所以从2开始计算
            for (int i = 2; i <= n; i++){
                profits[i] = profits[i - 1];
                List<int[]> group = groups.get(i);
                if(group != null){
                    for (int[] p : group){
                        profits[i] = Math.max(profits[i],profits[p[0]] + p[1]);
                    }
                }
            }
            return profits[n];
        }
    }

    网络异常,图片无法展示
    |


    目录
    相关文章
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 27. 移除元素 详细解读
    [Java·算法·简单] LeetCode 27. 移除元素 详细解读
    27 1
    |
    6天前
    |
    算法 Java C语言
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
    [Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
    25 0
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 392. 判断子序列 详细解读
    [Java·算法·简单] LeetCode 392. 判断子序列 详细解读
    42 0
    |
    6天前
    |
    存储 canal 算法
    [Java·算法·简单] LeetCode 125. 验证回文串 详细解读
    [Java·算法·简单] LeetCode 125. 验证回文串 详细解读
    31 0
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
    [Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
    28 0
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
    [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
    22 0
    |
    6天前
    |
    算法 Java 索引
    [Java·算法·简单] LeetCode 141. 环形链表 详细解读
    [Java·算法·简单] LeetCode 141. 环形链表 详细解读
    29 0
    |
    6天前
    |
    存储 算法 Java
    [Java·算法·简单] LeetCode 383. 赎金信 详细解读
    [Java·算法·简单] LeetCode 383. 赎金信 详细解读
    26 0
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 9. 回文数 详细解读
    [Java·算法·简单] LeetCode 9. 回文数 详细解读
    23 0

    热门文章

    最新文章