Leetcode - 周赛388

news2025/4/15 16:45:46

目录

一,3074. 重新分装苹果

二,3075. 幸福值最大化的选择方案

三,3076. 数组中的最短非公共子字符串

四,3077. K 个不相交子数组的最大能量值


一,3074. 重新分装苹果

本题是一道阅读理解题,就是将数组apple中的所有苹果全部放入capacity中,问最少需要多少个箱子。先算出总的苹果树,再将箱子从小到大排序,然后将苹果放入箱子(从大到小放),代码如下:

class Solution {
    public int minimumBoxes(int[] apple, int[] capacity) {
        int sum = 0;
        for(int x : apple)
            sum += x;
        Arrays.sort(capacity);
        int n = capacity.length;
        for(int i=n-1; i>=0; i--){
            sum -= capacity[i];
            if(sum <= 0)
                return n-i;
        }
        return -1;
    }
}

二,3075. 幸福值最大化的选择方案

本题也是阅读理解题,本质就是贪心,从大到小选择,每选择一个孩子,那么剩下的孩子的幸福值全部减一且幸福值不会小于零(即幸福值>=0)。代码如下:

class Solution {
    public long maximumHappinessSum(int[] happiness, int k) {
        Arrays.sort(happiness);
        int j = 0;
        int n = happiness.length;
        long ans = 0;
        for(int i=n-1; i>=0&&j<k; i--){
            if(happiness[i] > j){
                ans += happiness[i]-j;
                j++;
            }else
                return ans;
        }
        return ans;
    }
}

三,3076. 数组中的最短非公共子字符串

本题数据范围较小,可以直接暴力求解,代码如下:

class Solution {
    public String[] shortestSubstrings(String[] arr) {
        int n = arr.length;
        String[] ans = new String[n];
        for (int i = 0; i < n; i++) {
            int m = arr[i].length();
            String res = "";
            for (int size = 1; size <= m && res.isEmpty(); size++) {
                for (int j = size; j <= m; j++) {
                    String t = arr[i].substring(j - size, j);
                    if ((res.isEmpty() || t.compareTo(res) < 0) && check(arr, i, t)) {
                        res = t;
                    }
                }
            }
            ans[i] = res;
        }
        return ans;
    }

    private boolean check(String[] arr, int i, String sub) {
        for (int j = 0; j < arr.length; j++) {
            if (j != i && arr[j].contains(sub)) {
                return false;
            }
        }
        return true;
    }
}

四,3077. K 个不相交子数组的最大能量值

划分dp

定义 f [ i ][ j ] 表示将前 j 个数分成 i 段所得到的最大值

根据题目要求,f [ i ] [ j ] 的转移来源有两个:

  1. 不选择当前数,那么f[ i ][ j ]可以等价于将前 j - 1 个数分成 i 段所得到的最大值, 即 f [ i ][ j-1 ]
  2. 选择当前数,设选择的子数组的范围是[L,j)该子数组的和为 pre[ j ] - pre[ L ],那么当前的转移方程是 f [i - 1][ L ] + (k-i+1) * (-1)^(i+1) * (pre[ j ]- pre[ L ] )

可以得到如下的递推方程:

f [ i ][ j ] = Math.max( f [ i ][ j - 1],f [i - 1][ L ] + (k-i+1) * (-1)^(i+1) * (pre[ j ]- pre[ L ] ) )

可以看出来,如果要计算上述 f [ i ][ j ],需要遍历三个未知数 i ,j,L,这样的话就会超时,所以还要优化。可以将上述的方程因式分解:

设 w = (-1)^(i+1)

f [ i ][ j ] = Math.max( f [ i ][ j - 1],f [i - 1][ L ] + w * (pre[ j ] - pre[ L ] ) )

              = Math.max( f [ i ][ j - 1],f [i - 1][ L ] - w * pre[ L ] + w * pre[ j ] )

可以看出只有 mx =  f [i - 1][ L ] - w * pre[ L ] 与 L 有关系,能否将 L 这层循环省略:

当 j = i 时,计算 L = { i - 1 } 

当 j = i+1时,计算 L = { i - 1,i }

当 j = i+2时,计算 L = { i - 1,i,i + 1 }

.....

可以看出 L 除了等于 j-1时没有重复计算,其他情况一直在重复计算,通过这一特点,就可以将L这层循环给省略掉了。

注:i <= j,因为要将 j 个数分成 i 段,那么至少也要有 i 个数

代码如下:

class Solution {
    public long maximumStrength(int[] nums, int k) {
        //f[i][j]:前j个数分成i段
        //f[i][j] = Max(f[i][j-1], f[i][L]+(k-i+1)*(-1)^k*(pre[j]-pre[l]))
        int n = nums.length;
        long[][] f = new long[k+1][n+1];
        long[] pre = new long[n+1];
        for(int i=0; i<n; i++)
            pre[i+1] = pre[i] + nums[i];
        for(int i=1; i<k+1; i++){
            f[i][i-1] = Long.MIN_VALUE/2;
            long mx = Long.MIN_VALUE/2;
            int w = (k-i+1)*(i%2==1?1:-1);
            for(int j=i; j<=n-k+i; j++){
                mx = Math.max(mx, f[i-1][j-1]-w*pre[j-1]);
                f[i][j] = Math.max(f[i][j-1], mx + w*pre[j]);
            }
        }
        return f[k][n];
    }
}

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

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

相关文章

springboot“力炫”健身馆网站

摘要 随着网络科技的不断发展以及人们经济水平的逐步提高&#xff0c;网络技术如今已成为人们生活中不可缺少的一部分&#xff0c;而信息管理系统是通过计算机技术&#xff0c;针对用户需求开发与设计&#xff0c;该技术尤其在各行业领域发挥了巨大的作用&#xff0c;有效地促…

7.1strcmp

strcmp 函数原型 extern int strcmp(const char *s1,const char *s2);规则 当s1<s2时&#xff0c;返回为负数&#xff1b; 当s1s2时&#xff0c;返回值0&#xff1b; 当s1>s2时&#xff0c;返回正数。 即&#xff1a;两个字符串自左向右逐个字符相比&#xff08;按ASCI…

springboot项目自定义切面增强方法功能(springboot记录日志)

说明 背景&#xff1a;记录系统接口日志入库&#xff0c;包含接口方法、入参、回参、响应时间、操作人、操作时间等信息。 方案&#xff1a;添加自定义切面处理 一、自定义切面注解 package com.gstanzer.supervise.annotation;import com.gstanzer.supervise.enums.Busine…

【BFS】走迷宫问题——acwing844

问题描述 给定一个 nm 的二维整数数组&#xff0c;用来表示一个迷宫&#xff0c;数组中只包含 0 或 1&#xff0c;其中 0表示可以走的路&#xff0c;1 表示不可通过的墙壁。 最初&#xff0c;有一个人位于左上角 (1,1) 处&#xff0c;已知该人每次可以向上、下、左、右任意一…

Ubuntu20下C/C++编程开启TCP KeepAlive

1、在linux下&#xff0c;测试tcp保活&#xff0c;可以使用tcp自带keepalive功能。 2、几个重要参数&#xff1a; tcp_keepalive_time&#xff1a;对端在指定时间内没有数据传输&#xff0c;则向对端发送一个keepalive packet&#xff0c;单位&#xff1a;秒 tcp_keep…

学习开发小程序的起航日记

2024年3月16日 不知不觉中三月份还只剩了一半的光景&#xff0c;我想写的内容还很多没有写&#xff0c;或者更应该说&#xff0c;是想积累的还有很多。现在最应该去完善Java的内容&#xff0c;可还是想先等等。想等搞清楚小程序部分&#xff0c;想等积累完小程序的内容。 这几…

unraid docker.img扩容

unraid 弹Docker image disk utilization of 99%&#xff0c;容器下载/更新失败 我的版本是6.11.5&#xff0c;docker.img满了导致容器不能更新&#xff0c;遇到同样问题的可以先用docker命令清除一下仓库(当然不一定能清理出来&#xff0c;我已经清理过只清理出来1G多点&…

黑马微服务p30踩坑

报错详情 : orderservice开不起来 : 发生报错 : 然后检查了以下端口啥的 &#xff0c;配置啥的都是没有问题的 ; 解决办法 : 1 . 修改nacos1,2,3中的端口&#xff0c;将conf 中 cluster.conf中 的 127.0.0.1 全部改成自己本机的真实ipv4地址; 本机真实ipv4地址查看 :…

Java学习笔记(14)

常用API Java已经写好的各种功能的java类 Math Final修饰&#xff0c;不能被继承 因为是静态static的&#xff0c;所以使用方法不用创建对象&#xff0c;使用里面的方法直接 math.方法名 就行 常用方法 Abs,ceil,floor,round,max,minm,pow,sqrt,cbrt,random Abs要注意参数的…

数据结构:树和二叉树

树的概念 1.树是一种非线性的数据结构。它是由n个有限节点的集合。 2.树分为根节点和子树。根节点没有前驱节点。 3.树的子树是由一个个子树组成&#xff0c;它们可以看作一个个集合。每个集合下面又有集合。 因此&#xff0c;树是递归定义的。 树形结构中&#xff0c;子树…

Leetcode刷题-(21~25)-Java

算法是码农的基本功&#xff0c;也是各个大厂必考察的重点&#xff0c;让我们一起坚持写算法题吧。 遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即是本心。 我们在我们能力范围内&#xff0c;做好我们该做的事&#xff0c;然后相信一切都事最好的安排就可…

软件应用,物流运单填写模板,物流打印快递单教程,货运单怎么打印视频教程

软件应用&#xff0c;物流运单填写模板&#xff0c;物流打印快递单教程&#xff0c;货运单怎么打印视频教程 一、前言 以下软件操作教程以 佳易王物流货运管理系统软件V17.2为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、物流管理系统打印&a…

【webrtc】m122:PacingController 源码阅读

PacingController 关系与BitrateProber 关系更为密切PacingController 内置BitrateProber G:\CDN\signalapp_webrtc\modules\pacing\pacing_controller.hPacingControllerBitrateProber prober_;可配置BitrateProber 是否激活 PacingController 关系与BitrateProber 关系更为密…

springboot基于spring boot的在线答题微信小程序

摘 要 在线答题微信小程序是考试中重要的一环&#xff0c;在线答题是学生获取任务信息的主要渠道。为了方便学生能够在网站上查看任务信息、考试&#xff0c;于是开发了基于 springboot框架设计与实现了一款简洁、轻便的在线答题微信小程序。本微信小程序解决了在线答题事务中的…

Android Kotlin知识汇总(三)Kotlin 协程

Kotlin的重要优势及特点之——结构化并发 Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理&#xff0c;例如网络调用、本地数据访问等任务的管理。本主题介绍如何使用 Kotlin 协程解决以下问题&#xff0c;从而让您能够编写出更清晰、更简洁的应用代…

AI毕业论文降重GPTS,避免AI检测,高效完成论文

视频演示 AI毕业论文降重GPTS&#xff0c;避免AI检测&#xff0c;高效完成论文&#xff01; 开发目的 “毕业论文降重”GPTS应用&#xff0c;作用为&#xff1a;重新表述学术论文&#xff0c;降低相似性评分&#xff0c;避免AI检测。 使用地址 地址&#xff1a;毕业论文降重…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ColumnSplit)

将子组件纵向布局&#xff0c;并在每个子组件之间插入一根横向的分割线。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 ColumnSplit通过分割线限制子组件的高度。初始…

跨境电商选品实战——Ownips公开数据信息安全采集+Python爬虫轻松搞定Lazada电商选品

文章目录 一、引言二、Lazada电商平台选品实战2.1、分析Lazada电商平台的商品列表接口2.2、定位商品列表计算逻辑2.3、封装高质量住宅IP2.4、运行爬虫 三、数据处理及选品分析四、Ownips——企业级全球静态住宅IP&#xff0c;高效采集公开数据 一、引言 互联网与外贸的结合&am…

考察c语言关键字

C语言——关键字 1.问题&#xff1a;简述goto语句的作用 答&#xff1a;无条件跳转 具体来说&#xff0c;其作用在于允许程序在执行时无条件地跳转到指定的标签位置&#xff0c;并从该标签位置继续执行。通过goto语句&#xff0c;可以实现程序流程的无条件转移&#xff0c;使得…

【python】爬取杭州市二手房销售数据做数据分析【附源码】

一、背景 在数据分析和市场调研中&#xff0c;获取房地产数据是至关重要的一环。本文介绍了如何利用 Python 中的 requests、lxml 库以及 pandas 库&#xff0c;结合 XPath 解析网页信息&#xff0c;实现对链家网二手房销售数据的爬取&#xff0c;并将数据导出为 Excel 文件的过…