力扣10.6

news/2024/10/6 23:15:39 标签: leetcode, 算法

134. 加油站

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组 gascost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

数据范围

  • gas.length == n
  • cost.length == n
  • 1 <= n <= 105
  • 0 <= gas[i], cost[i] <= 104

分析

前缀和+双指针,只要满足大小为n的区间内,所有的加油站都能正常通过,预处理油和花费的前缀和,只需要保证每个点处油的前缀和比花费前缀和大就行,若有一个点不存在,则左指针到达他下一个加油站的位置。

代码

class Solution {
public:
    const static int N = 2e5 + 5;
    int pgas[N], pcost[N];
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int res = -1;
        int n = gas.size();
        for(int i = 1; i <= 2 * n; i ++ ) {
            if(i <= n) pgas[i] = pgas[i - 1] + gas[i - 1];
            else pgas[i] = pgas[i - 1] + gas[(i - 1) % n];
            if(i <= n) pcost[i] = pcost[i - 1] + cost[i - 1];
            else pcost[i] = pcost[i - 1] + cost[(i - 1) % n];
        }
        for(int i = n; i <= 2 * n; i ++ ) {
            int j = i - n + 1;
            int last = j;
            while(j <= i) {
                cout << i << " " << j << endl; 
                int tcost = pcost[j] - pcost[last - 1];
                int tgas = pgas[j] - pgas[last - 1];
                if(tcost > tgas) break;
                else j ++ ;
            }
            if(j == i + 1) {
                res = i - n;
                return res;
            } 
            i = j + n - 1;
        }
        return res;
    }
};

2435. 矩阵中和能被 K 整除的路径

给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发,每一步只能往 下 或者往 右 ,你想要到达终点 (m - 1, n - 1)

请你返回路径和能被 k 整除的路径数目,由于答案可能很大,返回答案对 109 + 7 取余 的结果。

数据范围

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 5 * 104
  • 1 <= m * n <= 5 * 104
  • 0 <= grid[i][j] <= 100
  • 1 <= k <= 50

分析

d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]表示到达 ( i , j ) (i,j) (i,j)后前缀和模 k k k后的路径数量,状态转移如下

  • d p [ i ] [ j ] [ k ] + = d p [ i − 1 ] [ j ] [ ( k − g r i d [ i ] [ j ] ) % k k ] + d p [ i ] [ j − 1 ] [ ( k − g r i d [ i ] [ j ] ) % k k ] dp[i][j][k]+=dp[i-1][j][(k-grid[i][j])\%kk]+dp[i][j-1][(k-grid[i][j])\%kk] dp[i][j][k]+=dp[i1][j][(kgrid[i][j])%kk]+dp[i][j1][(kgrid[i][j])%kk]

代码

class Solution {
public:
    const static int N = 55, mod = 1e9 + 7, M = 5e2 + 5;
    int n, m;
    int numberOfPaths(vector<vector<int>>& grid, int kk) {
        n = grid.size();
        m = grid[0].size();
        int dp[n + 2][m + 2][N];
        memset(dp, 0, sizeof(dp));
        dp[1][1][grid[0][0] % kk] = 1;
        for(int i = 1; i <= n; i ++ ) {
            for(int j = 1; j <= m; j ++ ) {
                for(int k = 0; k < kk; k ++ ) {
                    int l = grid[i - 1][j - 1];
                    if(j >= 2) dp[i][j][k] += dp[i][j - 1][((k - l % kk) % kk + kk) % kk];
                    if(i >= 2) dp[i][j][k] += dp[i - 1][j][((k - l % kk) % kk + kk) % kk];
                    dp[i][j][k] %= mod;
                }
            }
        }
        return dp[n][m][0];
    }
};

http://www.niftyadmin.cn/n/5692275.html

相关文章

HarmonyOS/OpenHarmony 自定义弹窗页面级层级控制解决方案

关键词&#xff1a;CuntomDialog自定义弹窗、SubWindow子窗口、页面级、弹窗层级控制、鸿蒙、弹窗展示层级异常 问题存在API版本&#xff1a;API10 - API12&#xff08;该问题已反馈&#xff0c;期望后续官方能增加页面级控制能力&#xff09; 在正常的鸿蒙app开发过程中&…

Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群

随着业务的增长&#xff0c;陆续会有新的节点需要加入集群。当我们在集群中的某个节点上使用命令生成令牌时会出现报错信息。 # 生成令牌 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node出现报错信息&#xff1a; Unable to create enrollment…

国庆作业-5

C语言练习-1 C语言练习-2 C练习-1 C练习-2

第五节——转移表(让你不再害怕指针)

文章目录 制作简易计算器什么是转移表&#xff1f;switch函数实现函数指针数组实现 制作简易计算器 要求&#xff1a;制作一个简易计算器&#xff0c;可以进行* / - 等功能运算。 什么是转移表&#xff1f; 指的就是通过函数指针数组的方式通过数组去调用里面的函数&#x…

5QI(5G QoS Identifier)

5QI&#xff08;5G QoS Identifier&#xff0c;5G 服务质量标识符&#xff09;是在5G网络中用于定义特定数据流所需服务级别的指标。它用于优先处理流量&#xff0c;并根据流量的类型及其特定需求分配网络资源。5QI值从1到255&#xff0c;每个值对应一组QoS参数&#xff0c;这些…

教你快速成为洛谷红名大佬!2分钟学会,2个月成功!

大家好&#xff0c;我是 zhouxi2022HZO&#xff0c;洛谷账号&#xff1a;876268。今天教大家如何在洛谷上快速红名。 我们分两段&#xff0c;一段是为蓝名绿名定制的&#xff0c;一段是为橙名和不稳定的红名定制的。 如果你是蓝名绿名 首先&#xff0c;你需要有一定的 C \t…

5.8K Star,Microsoft 官方开源电商平台

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 随着微服务架构和容器化技术的逐渐普及&#xff0c;越来越多的开发者…

Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)

文章目录 Docker的数据持久化是什么&#xff1f;1.数据卷&#xff08;Data Volumes&#xff09;使用Docker 创建数据卷创建数据卷创建一个容器&#xff0c;将数据卷挂载到容器中的 /data 目录。进入容器&#xff0c;查看数据卷内容停止并重新启动容器&#xff0c;数据卷中的数据…