LeetCod刷题笔记

news2024/11/24 1:56:42

目录

 2739.总行驶距离

 思路:模拟

代码

6890.找出分区值

 思路:急转弯

代码:

 1254.统计封闭岛屿的数目​编辑

 思路:DFS

 代码:

6447.给墙壁刷油漆

思路:动态规划

代码: 

思路:状态DP

代码: 

1262.可被三整除的最大和 

 思路:贪心

 代码:


 2739.总行驶距离

 思路:模拟

模拟即可:

每次循环主油箱减去5升

(1)主箱是有5升油,并且副油箱有油则,主油箱加一,副油箱减一。

(2) 主油箱有5升油,副油箱无油,继续下次循环

(3)主油箱没有5升油,返回,答案加上剩余的主箱油即可

代码

class Solution {
public:
    int distanceTraveled(int mainTank, int additionalTank) {
        for(int i=mainTank;i>=5;i-=5){
            if(additionalTank) {
                additionalTank--;
                mainTank++;
                i++;
            }
        }
        return mainTank*10;
    }
};

如果你的代码真是无敌了!那么这件事真的是泰裤辣!!!!!


6890.找出分区值

 思路:急转弯

 (1)sort排序从小到大

 (2)取两两相邻的最小值即可

代码:

class Solution {
public:
    int findValueOfPartition(vector<int>& nums) {
        int len=nums.size();
        sort(nums.begin(),nums.end()); 
        int max_t=INT_MAX;
        for(int i=0;i<len-1;i++){
            max_t=min(nums[i+1]-nums[i],max_t);
            if(max_t==0) return 0;
        }
        return max_t;
    }
};

 这件事真的是泰裤辣!!


 1254.统计封闭岛屿的数目

 思路:DFS

 (1)从网格图的第一行、最后一行、第一列和最后一列的所有 0 出发,DFS 访问四方向的 0,并把这些 0 标记成「访问过」。代码实现时可以直接把 0 修改成 1。

  (2)然后从剩下的 0 出发,按照同样的方式 DFS 访问四方向的 0,同时把 0 改成 1。每次从一个新的 0 出发(起点),就意味着找到了一个新的封闭岛屿,答案加一。

  (3)此外,如果行数或列数不足 3,此时没有封闭岛屿,可以直接返回 0。

 代码:

class Solution {
public:
    //dfs只管填充
    void dfs(vector<vector<int>>& grid,int x,int y){
        int hang=grid.size();
        int lie=grid[0].size();
        if(x<0||y<0||x>=hang||y>=lie||grid[x][y]) return;
        grid[x][y]=1;   //标记已经遍历过
        dfs(grid,x-1,y);
        dfs(grid,x+1,y);
        dfs(grid,x,y-1);
        dfs(grid,x,y+1);
    }
    int closedIsland(vector<vector<int>>& grid) {
        int hang=grid.size();
        int lie=grid[0].size();
        int count=0;
        if(hang<3||lie<3) return 0;
        for(int i=0;i<hang;i++){
            if(i==0||i==hang-1){
                for(int j=0;j<lie;j++){
                    dfs(grid,i,j);
                }
            }else{
                dfs(grid,i,0);
                dfs(grid,i,lie-1);
            }
        }

        for(int i=1;i<hang-1;i++){
            for(int j=1;j<lie-1;j++){
                if(!grid[i][j]){
                    count++;
                    dfs(grid,i,j);
                }
            }
        }
        return count;

    }
};


6447.给墙壁刷油漆

思路:动态规划

dp[i][j]表示墙[0,i]中粉刷至少j面的最小花费,答案应该为dp[n-1][n]。

状态转移

按照01背包的套路,最外层循环是枚举0 <= i < n。内层循环枚举 j(相当于体积):

(1)付费油漆匠刷墙 i,那么免费油漆匠就会刷另外time[i]面墙,付费油漆匠刷完墙 i 花费为cost[i],付费和免费两位油漆匠一共刷了time[i]+1面墙。

状态转移方程为 :dp[i][j]=dp[i-1][j-time[i]-1]+cost[i]

(2)免费油漆匠刷墙i,说明此时付费油漆匠正在刷某一面墙,“墙[0,i]中粉刷至少 j 面的最小花费”与“墙[0,i)中粉刷至少 j 面的最小花费”是一样的。

状态转移方程为:dp[i][j]=dp[i-1][j]。

以上两种情况取较小值进行转移即可。

代码: 

class Solution {
public:
    int paintWalls(vector<int> &cost, vector<int> &time) {
        int n = cost.size(), f[n + 1];
        memset(f, 0x3f, sizeof(f));
        f[0] = 0;
        for (int i = 0; i < n; i++) {
            int c = cost[i], t = time[i] + 1; 
            for (int j = n; j; j--)
                f[j] = min(f[j], f[max(j - t, 0)] + c);
        }
        return f[n];
    }
};

6893.特别的排列

 

思路:状态DP

集合论与位运算(状态DP前缀知识)

首先定义 dfs(i,j) 表示当前可以选的下标集合为 i,上一个选的数的下标是 j 时,可以构造出多少个特别排列。

递归边界:dfs(0,j)=1,表示找到了一个特别排列。

递归入口:dfs(U\{j},j),其中全集 U={0,1,2,⋯,n−1}。枚举特别排列的第一个数的下标 j,累 加所有 dfs(U\{j},j),即为答案。

代码: 

class Solution {
public:
    const int mod=1e9+7;
    //取模用
    int specialPerm(vector<int>& nums) {
        int len=nums.size();
        int U=(1<<len)-1;  
        //全集,1代表还可以进入排列
        int flage[U][len];
        memset(flage,-1,sizeof(flage));
        //标记是否已经判断过
        function<int(int,int)> dfs=[&](int i,int j)->int{
            if(i==0) return 1;
            //整数都用完了
            int& res=flage[i][j];
            if(res!=-1) return res;
            //已经判断过了
            int ans=0;
            for(int k=0;k<len;++k){
                int x=nums[k];
                if((i>>k)&1 && ((nums[j]%x)==0||(x%nums[j]==0))){
                    ans=(ans+dfs(i^(1<<k),k))%mod;
                }
            }
            res=ans;
            return res;
        };

        int res=0;
        for(int i=0;i<len;i++){
            res = (res + dfs((U)^(1 << i), i)) % mod;
        }
        return res;
    }
};

 

 泰裤辣!!

1262.可被三整除的最大和 

 思路:贪心

由于数组中没有负数,如果整个数组的元素和 s 可以被 3 整除,那么 s 就是最大的元素和。

否则,如果 s 不能被 3 整除,那就看看能否让 s 减去某些 nums[i],使得 s 可以被 3 整除。

找到所有 nums[i]%3=1 的 nums[i],放到数组中;

(1)如果 s%3=1:
        a1 不为空,那么答案可能是 s−a1​[0]
        如果 a2中至少有两个数,那么答案可能是 s−a2​[0]−a2​[1] 

         这两种情况取最大值。
         如果没有这样的数,返回0。

(2)如果s%3=2:

        如果a2不为空,那么答案可能是s−a2[0];
        如果 中至少有两个数,那么答案可能是 s−a1​[0]−a1​[1];
        这两种情况取最大值。如果没有这样的数,返回 0。

 代码:

class Solution {
public:
    int maxSumDivThree(vector<int>& nums) {
        int SUM=accumulate(nums.begin(),nums.end(),0);
        if(SUM%3==0) return SUM;
        vector<int> a[3];
        for(int x:nums) a[x%3].push_back(x);
        sort(a[1].begin(),a[1].end());
        sort(a[2].begin(),a[2].end());
        if(SUM%3==2) swap(a[1],a[2]);
        int ans=a[1].size()?SUM-a[1][0]:0;
        if(a[2].size()>1) ans=max(ans,SUM-a[2][0]-a[2][1]);
        return ans;


    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac配置Android addr2line环境变量以及使用

1.首先进入终端 2.下面这个指令进入vim编辑器&#xff0c;就可以修改环境变量 vim ./.bash_profile3.按i进入insert模式 4.输入路径&#xff1a; arm32: export PATH${PATH}:/Users/xianquan/Library/Android/sdk/ndk/21.1.6352462/toolchains/arm-linux-androideabi-4.9/p…

Vue中如何进行自定义动画与动画效果设计

Vue中如何进行自定义动画与动画效果设计 在Vue中&#xff0c;动画效果是非常有用的&#xff0c;它可以使用户界面变得更加生动、有趣&#xff0c;从而提高用户体验。Vue提供了一套非常方便的动画系统&#xff0c;使得我们可以非常容易地实现动画效果。 在本文中&#xff0c;我…

6.19实训笔记

6.19实训笔记 6.19一、座右铭二、知识回顾2.1 Java集合体系2.2 工具类Utils 三、JavaIO流3.1 File类3.2 File类的使用3.2.1 File文件/文件夹类的创建3.2.2 File类的获取操作3.2.3 File类判断操作--boolean3.2.4 File类对文件/文件夹的增删改3.2.5 、File类的获取子文件夹以及子…

python+appium自动化测试-滑动到固定的位置停止

当前很多APP都存在滑动操作&#xff0c;但这些元素一般无法单独定位到&#xff0c;多为一个数组或列表&#xff0c;这边介绍了几种方法&#xff0c;使元素滑动到你想要的位置后停止。 一、scroll()方法 Appium 中webdriver提供scroll()方法来滚动页面&#xff0c;该方法只适用…

matplotlib---中文显示问题、字体库、图像结构、画布设置

1. 中文显示问题 解决方案一&#xff1a; 下载中文字体&#xff08;黑体&#xff0c;看准系统版本&#xff09; 步骤一&#xff1a;下载 SimHei 字体&#xff08;或者其他的支持中文显示的字体也行&#xff09; 步骤二&#xff1a;安装字体 linux下&#xff1a;拷贝字体到 usr…

三层架构综合实验

目录 拓扑结构&#xff1a; 要求&#xff1a; 确定广播域的个数 分配网段 配置Eth-Trunk 创建VLAN 配置STP生成树协议 修改根 边缘端口 SVI VRRP DHCP 路由部分 OSPF 缺省 汇总 NAT 拓扑结构&#xff1a; 要求&#xff1a; 1、内部IP地址基于172.16.0.0/16进行…

CABAC编解码原理分析

CABAC编解码原理分析 文章目录 CABAC编解码原理分析一、二进制算数编码二、CABAC编码三、CABAC编解码与普通的二元算术编码的区别四、 CABAC编解码中各个变量的计算&#xff1a;五、 一些其他问题&#xff1a;六、 总结&#xff1a;七、参考资料 一、二进制算数编码 cabac是一…

Nginx网络服务的配置

目录 一、Nginx概述 二、Nginx相对于Apache的优点 三、配置Nginx网络服务 1.编译安装和启用Nginx服务 2.修改Nginx主配置文件 一、Nginx概述 Nginx是一款高性能、轻量级Web服务软件。稳定性高&#xff0c;系统资源消耗低&#xff0c;对HTTP并发连接的处理能力高&#xff…

DNS 监控工具

域名系统 &#xff08;DNS&#xff09; 解析&#xff08;也称为 DNS 查找&#xff09;是在现代 IT 基础架构中建立连接和通信所需的基本组件之一。这是将人类可读的域或主机名与机器可读的 IP 地址映射的过程&#xff0c;使用户更容易访问组织的公共和专用网络上的主机。在最基…

SpringBoot 三级缓存解决循环依赖源码分析

文章目录 1. 不使用三级缓存可能存在的问题2. 源码分析2.1 对象实例的创建过程2.2 三级缓存的处理 3. 遗留问题 1. 不使用三级缓存可能存在的问题 在 SpringBoot 框架中&#xff0c;如果只存在两级缓存&#xff0c;那么当发生循环依赖的时候可能存在异常的对象创建流程如下图所…

如何解析 Impala 的 C++ 报错堆栈

生产环境用的都是release build&#xff0c;C代码产生的报错堆栈里没有函数名&#xff0c;很难像Java报错堆栈那样方便定位问题。下面是一个常见的启动报错&#xff0c;一般在CLASSPATH设置有误时发生&#xff1a; I0619 19:13:00.951988 5279 status.cc:129] Failed to find…

【全新升级版】R语言实战(第3版),超过30万学习者入手的R语言教程

在我刚入学那会儿初次接触R语言&#xff0c;看的第一本工具书就是《R语言实战》&#xff0c;收获良多&#xff0c;当时还只是第二版。最近和人民邮电出版社的好朋友交流发现&#xff0c;他告诉我上个月刚刚出版了《R语言实战 第三版》 &#xff0c;豆瓣评分9.2&#xff0c;被称…

Linux之生产者消费者模型(上)——单生产者单消费者

文章目录 前言一、生产者消费者模型1.生产消费2.生产消费关系321原则生产消费模型的特点 二、基于阻塞队列&#xff08;blockqueue&#xff09;的生产消费模型1.概念2.单生产单消费模型代码运行分析两种情况导致的现象生产者生产的慢&#xff0c;消费者消费的快生产者生产的快&…

精彩回顾 | “XR云新未来:弹性算力赋能可交互、沉浸式商业实践” 赋能云端虚拟世界

6月15日&#xff0c;由平行云联合首都在线共同主办&#xff0c;中关村软件园协办&#xff0c;以“XR云新未来|弹性算力赋能可交互、沉浸式商业实践”为主题的XR行业交流盛会在北京成功举办。 活动邀请多位XR行业大咖&#xff0c;共同见证首都在线联合平行云发布Cloud XR平台。…

MySQL数据库——索引

MySQL数据库——索引 一、索引基本常识1.索引的概念2.索引的作用3.创建索引的依据 二、索引的分类1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引 三、索引的查看与删除1.查看索引2.删除索引 一、索引基本常识 数据库索引是数据库管理系统中一个排序的数据结构&#xff0…

OpenGL 深度测试

1.简介 深度缓冲就像颜色缓冲(Color Buffer)&#xff08;储存所有的片段颜色&#xff1a;视觉输出&#xff09;一样&#xff0c;在每个片段中储存了信息&#xff0c;并且&#xff08;通常&#xff09;和颜色缓冲有着一样的宽度和高度。深度缓冲是由窗口系统自动创建的&#xf…

6 从0开始学PyTorch | 构建模型、损失函数、广播机制

前面都在学一些PyTorch的基本操作&#xff0c;从这一节开始&#xff0c;真正进入到模型训练的环节了。原作者很贴心的一步步教我们实现训练步骤&#xff0c;并且还从一个最简单的例子出发&#xff0c;讲了优化方案。 宏观上的训练过程 image.png 当然这里所说的训练还没有到深…

vue进阶-vue-cli

CLI是Command-Line Interface&#xff0c;翻译为命令行界面&#xff0c;但是俗称脚手架。 Vue-CLI是一个官方发布 vue.js 项目脚手架&#xff0c;使用 vue-cli 可以快速搭建 Vue 开发环境以及对应的 webpack 配置。 vue项目相关文件以 .vue 为后缀&#xff0c;需要事先安装 N…

【LeetCode热题100】打卡第25天:柱状图中最大的矩形

文章目录 柱状图中最大的矩形⛅前言&#x1f512;题目&#x1f511;题解 柱状图中最大的矩形 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xf…

GEE:绘制一个点的Landsat1985-2020年逐日NDVI时间序列折线图

作者:CSDN @ _养乐多_ 本文记录了在GoogleEarthEngine(GEE)平台上选择一个点,根据该点在时间段内所有有效像素值绘制折线图的代码。 结果如下图所示, 文章目录 一、代码二、代码链接一、代码 var roi = geometry Map.addLayer(roi, {color