【力扣周赛】第 353 场周赛

news2024/11/17 13:24:50

文章目录

  • Q1:6451. 找出最大的可达成数字(脑筋急转弯?)
    • 思路
    • 竞赛时代码
  • Q2:6899. 达到末尾下标所需的最大跳跃次数(DP)
    • 思路
    • 竞赛时代码
  • Q3:6912. 构造最长非递减子数组(DP)
    • 思路
    • 竞赛时代码
  • Q4:6919. 使数组中的所有元素都等于零
    • 思路——贪心+记录每个数字对之后的影响
    • 竞赛时代码
  • 成绩记录

https://leetcode.cn/contest/weekly-contest-353

Q1:6451. 找出最大的可达成数字(脑筋急转弯?)

https://leetcode.cn/problems/find-the-maximum-achievable-number/
在这里插入图片描述

思路

每次可以将差异减少2,一共可以操作 t 次,所以可达成的数字范围是:
[ x − 2 ∗ t , x + 2 ∗ t ] [x - 2 * t, x + 2 * t] [x2t,x+2t]
其中的最大值是 x + 2 ∗ t x + 2 * t x+2t

竞赛时代码

class Solution {
    public int theMaximumAchievableX(int num, int t) {
        return num + 2 * t;
    }
}

在这里插入图片描述

Q2:6899. 达到末尾下标所需的最大跳跃次数(DP)

https://leetcode.cn/problems/maximum-number-of-jumps-to-reach-the-last-index/

在这里插入图片描述

最开始想错方向了!以为是 BFS 求最短路!
结果是求最长路。。。

思路

数据范围是 1000 1000 1000
可以选择 O ( n 2 ) O(n^2) O(n2) 的时间复杂度的算法。

枚举每个位置,在枚举每个位置时检查可以从前面哪些位置转移过来,并更新达到当前位置所需的最大跳跃次数。

dp数组初始化 为 -1,表示到不了这个位置,dp[0] = 0,表示不用跳就能到。

状态转移方程为: d p [ i ] = M a t h . m a x ( d p [ i ] , d p [ j ] + 1 ) ; dp[i] = Math.max(dp[i], dp[j] + 1); dp[i]=Math.max(dp[i],dp[j]+1);,表示能从 j 跳过来那跳跃次数就 + 1。

竞赛时代码

class Solution {
    public int maximumJumps(int[] nums, int target) {
        int n = nums.length;
        int[] dp = new int[n];  // dp[i]表示达到i的最大跳跃次数
        Arrays.fill(dp, -1);    // -1表示到不了这个位置
        dp[0] = 0;
        for (int i = 1; i < n; ++i) {
            for (int j = 0; j < i; ++j) {
                // 能从j跳过来且j可以被达到
                if (Math.abs(nums[i] - nums[j]) <= target && dp[j] != -1) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
        }
        return dp[n - 1];
    }
}

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( n ) O(n) O(n)

Q3:6912. 构造最长非递减子数组(DP)

https://leetcode.cn/problems/longest-non-decreasing-subarray-from-two-arrays/

在这里插入图片描述

思路

看数据范围,大概率使用 O ( n ) O(n) O(n) 的算法。

考虑 DP。

dp[i][0] 表示 第 i 个位置选 nums1[i] 和 nums2[i] 中较值时,以nums3[i]为结尾的最大子数组长度
dp[i][1] 表示 第 i 个位置选 nums1[i] 和 nums2[i] 中较值时,以nums3[i]为结尾的最大子数组长度

枚举每个下标 i,则要么选择 n u m s 1 [ i ] nums1[i] nums1[i],要么选择 n u m s 2 [ i ] nums2[i] nums2[i],选择时的最大长度可以从上个状态 i − 1 i - 1 i1 转移过来。
通过比较数值大小判断能否转移,如果能够转移过来,那长度为 M a t h . m a x ( d p [ i ] , d p [ j ] + 1 ) Math.max(dp[i], dp[j] + 1) Math.max(dp[i],dp[j]+1)

竞赛时代码

class Solution {
    public int maxNonDecreasingLength(int[] nums1, int[] nums2) {
        int n = nums1.length, ans = 1, last = Math.min(nums1[0], nums2[0]);
        int[][] dp = new int[n][2];
        dp[0][1] = dp[0][0] = 1;        // 分别记录当前选较小值或最大值时的最大长度
        int lastmn = Math.min(nums1[0], nums2[0]), lastmx = Math.max(nums1[0], nums2[0]);
        for (int i = 1; i < n; ++i) {
            dp[i][0] = dp[i][1] = 1;
            int mn = Math.min(nums1[i], nums2[i]), mx = Math.max(nums1[i], nums2[i]);
            // 检查是否可以状态转移过来
            if (mn >= lastmn) dp[i][0] = Math.max(dp[i][0], dp[i - 1][0] + 1);
            if (mn >= lastmx) dp[i][0] = Math.max(dp[i][0], dp[i - 1][1] + 1);
            if (mx >= lastmn) dp[i][1] = Math.max(dp[i][1], dp[i - 1][0] + 1);
            if (mx >= lastmx) dp[i][1] = Math.max(dp[i][1], dp[i - 1][1] + 1);
            lastmn = mn;
            lastmx = mx;
            ans = Math.max(ans, Math.max(dp[i][0], dp[i][1]));
        }
        return ans;
    }
}

可以看到 dp[i] 的状态只会从 dp[i - 1] 转移过来,即无后效性,可以优化 dp 数组成变量节省空间。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

Q4:6919. 使数组中的所有元素都等于零

https://leetcode.cn/problems/apply-operations-to-make-all-array-elements-equal-to-zero/
在这里插入图片描述
提示:

1 <= k <= nums.length <= 10^5
0 <= nums[i] <= 10^6

思路——贪心+记录每个数字对之后的影响

我们从前往后枚举,当前数字 < 0 时返回 false, == 0 时不需要操作, > 0 时一定是减到 0的。(贪心)

每个位置 i 减去一个数字时,后面紧接着的 k - 1 个数字(也就是以 i 为开头的大小为 k 的窗口内的其它所有数字)。

我们用一个变量 sum 记录前面 k - 1 个数字对 i 的影响。


或者解释说:

对于位置靠前的数,如果前面的数的操作都不足以让其减为0(小于0直接返回False),则直接在当前位置操作(如果不在此处操作,后面的操作无法影响前面),用前缀和记录一下修改的数值即可。

竞赛时代码

class Solution {
    public boolean checkArray(int[] nums, int k) {
        int n = nums.length, sum = 0;   // sum是当前位置被前面k-1个位置影响减去的数值
        int[] d = new int[n];
        for (int i = 0; i < n; ++i) {
            // sum减去被移除窗口位置对应元素贡献的减去值,因为i-k影响不到i
            if (i >= k) sum -= d[i - k];        
            
            // nums[i]会被前面的数值影响减成负数,不合理
            if (nums[i] < sum) return false; 

            // 如果是最后k-1个数字,直接判断是否为0
            // 因为长度不够k了,所以最后的k-1个元素不能操作了。(不能作为窗口开始位置)
            if (nums[i] - sum != 0 && i > n - k) return false;   
            else {
                // 计算num[i]还需要减多少到0
                d[i] = nums[i] - sum;               
                sum += d[i];
            }
        }
        return true;
    }
}

在这里插入图片描述

成绩记录

在这里插入图片描述

4道 easy 题,但是我是傻逼!写的也太慢了!老是想歪。

写题的顺序是 1 2 4 3

第一题 39 s,多么美妙的开局!
但是!
怎么第 2 题是DP呀?
第 2 题是 DP 就算了怎么第 3 题还是 DP 呀?你会不会出点别的题!?

凎!

在这里插入图片描述

结束之后看了下别人写的题解,基本上和我也差不多,所以就还好。

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

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

相关文章

Openssh升级方法

文章目录 Openssh升级方法一.安装openssh模拟未升级版本二.查看当前的ssh服务版本 三.启动telnet、安装rzsz工具、创建普通账号&#xff0c;防止因为卸载openssh而导致无法登录主机四.卸载openssh的rpm安装包&#xff08;备注&#xff1a;此处未卸载ssl安装包&#xff09;&…

【WebGIS初学到入职】(15)入职一年的总结与分享

题外话 看看大纲可以怎么写&#xff0c;问问ChatGPT&#xff1a; ……算了&#xff0c;还是随便写写吧。 所以时间过得也是有够快的&#xff0c;这就一年了。 平淡 入职一年&#xff0c;已经看到好些位女同事结婚了&#xff08;男同事一个没有&#xff09;。领导和同事都挺…

汽车网站建设:开启汽车行业数字化转型的大门

随着科技的进步和互联网的普及&#xff0c;越来越多的汽车企业开始意识到一个强大的在线存在的重要性。汽车网站的兴起为汽车行业带来了新的机遇和好处。本文将简要介绍什么是汽车网站&#xff0c;探讨汽车网站的好处&#xff0c;并提供一些快速制作搭建汽车网站的方法。 汽车网…

@JsonFormat(pattern = “yyyy-MM-dd“, timezone = “GMT+8“) 日期格式

前端去掉时分秒 &#xff1a; /*** 出生日期*/ JsonFormat(pattern "yyyy-MM-dd", timezone "GMT8")// 解决后端到前端显示问题 DateTimeFormat(pattern "yyyy-MM-dd")// 解决前端到后端保存问题 TableField(value "birthday") A…

Django_静态资源配置和ajax(九)

目录 一、静态资源配置 二、AJAX ajax作用 使用ajax 1、环境配置 2、创建html模板文件 3、编写视图函数并添加路由 4、运行django开发服务器进行验证 源码等资料获取方法 一、静态资源配置 静态资源的相关配置都在项目目录下的 settings.py 文件中进行配置。配置参数如…

架构训练营笔记系列: 模块 1-2课

郭东白老师的架构课偏理论&#xff0c;属于道层级。李云华老师的课偏实践&#xff0c;属于术层级。没有理论不会举一反三&#xff0c;只有理论&#xff0c;就是纸上谈兵&#xff0c;两个课都很好。 架构与程序思维的区别 程序 逻辑实现 架构 判断 取舍 架构设计的关键不只…

ansible 报错 DEPRECATION WARNING 解决

报错信息 [DEPRECATION WARNING]: Distribution Ubuntu 18.04 on host 192.168.1.1 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered …

第五十二章 开发Productions - ObjectScript Productions - 不常见的任务 - 在目标是动态的情况下渲染连接

文章目录 第五十二章 开发Productions - ObjectScript Productions - 不常见的任务 - 在目标是动态的情况下渲染连接在目标是动态的情况下渲染连接使用 Ens.Director 开始和停止ProductionStopProduction()StartProduction()RecoverProduction()GetProductionStatus() 第五十二…

基于Pthreads多线程程序设计

“Hello world”程序 函数原型 1. pthread_create 函数原型&#xff1a;int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); 功能说明&#xff1a;创建一个线程。 参数说明 thread&#xff1a;线程句柄&#xf…

Pico版节奏光剑简单制作

视频教程参考&#xff1a;Pico VR Neo3开发实战教程&#xff08;1&#xff09;——节奏光剑&#xff0c;舞台灯效_哔哩哔哩_bilibili 1、新建项目和pico配置 插件导入 找到下载的pico SDK 选择json文件&#xff0c;点击即可导入 启用插件 在 Project Settings 窗口中&#xf…

Gradle的生命周期和Task

Gradle生命周期和Task 本文链接&#xff1a;Gradle的生命周期和Task_猎羽的博客-CSDN博客 Gradle生命周期 三大阶段&#xff1a; 初始化配置执行 Gradle的数量是多少&#xff1f;Module数量 Root Gradle 生命周期监听方法 生命周期监听的设置有两种方法&#xff1a; 实现…

Modelsim仿真问题解疑:初始时间段内逻辑不符

目录 一、问题描述 1.1 设计代码 1.2 综合结果 1.3 仿真结果 二、问题原因 三、解决方法 一、问题描述 在使用mode​lsim进行功能仿真时&#xff0c;会遇到如下情况&#xff0c;仿真结果在前面一段时间内的逻辑输出不符预期&#xff0c;后面的结果符合预期 以实现一个D触发…

火车头小发猫AI伪原创[php源码]

对于大多数站长来说&#xff0c;有点困难&#xff0c;但是如果他们不知道如何原创&#xff0c;我们不知道如何伪原创吗&#xff1f;我把我常用的伪原创的方法列出来&#xff0c;希望对大家有所帮助。 使用教程&#xff1a;火车头采集器AI伪原创 <?php header("Conte…

使用配置文件自定义线程池参数

首先创建线程池MyThreadConfig &#xff1a; Configuration public class MyThreadConfig {Beanpublic ThreadPoolExecutor threadPoolExecutor(){return new ThreadPoolExecutor(20,200,10,TimeUnit.SECONDS,new LinkedBlockingDeque<>(100000),Executors.defaultThrea…

SpringBoot集成Quartz集群模式

<!-- quartz定时任务 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency> 单机版本&#xff1a; SpringBoot集成Quartz动态定时任务_jobgroupname_小…

CentOS环境下的Nginx安装

Nginx 安装 下载 nginx 下载地址&#xff1a;http://nginx.org/en/download.html 将下载好的压缩包拷贝到根目录下 通过xshell如果出现 bash: rz: 未找到命令 &#xff0c;需要先运行下面的命令 yum -y install lrzsz安装 解压到当前目录 tar -zxvf nginx-1.22.1.tar.gz安…

尚无忧餐桌预订订桌包厢预订小程序源码

1.支持中餐、晚餐不同时间段桌位预定 2.支持包厢&#xff0c;大厅等不同区域预定 本系统后台tpvue 前端原生小程序 <!-- 导航栏 --> <!-- <van-nav-bar title"{{canteen}}" title-class"navbar" /> --> <van-nav-bar title"…

路径规划算法:基于水基湍流优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于水基湍流优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于水基湍流优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

springbboot拦截器,过滤器,监听器及执行流程

执行流程 过滤器是在请求进入容器后&#xff0c;但请求进入servlet之前进行预处理的。请求结束返回也是&#xff0c;是在servlet处理完后&#xff0c;返回给前端之前 请求按照上图进入conteoller后执行完再返回 过滤器&#xff08;Filter&#xff09;&#xff1a; 过滤器是S…

Matlab画等构造图

clc;clear;close all; data xlsread(TOPBRENT等T0构造.xlsx); x data(:,1) xmax max(x); xmin min(x); y data(:,2) ymax max(y); ymin min(y); z data(:,3); N 45; …