leetcode - 365周赛

news2024/11/20 18:34:08

一,2873.有序三元组中的最大值 I

 该题的数据范围小,直接遍历:

class Solution {
    public long maximumTripletValue(int[] nums) {
        int n = nums.length;
        long ans = 0;
        for(int i=0; i<n-2; i++){
            for(int j=i+1; j<n-1; j++){
                for(int k=j+1; k<n; k++){
                    ans = Math.max(ans,(long)(nums[i]-nums[j])*nums[k]);
                }
            }
        }
        return ans;
    }
}

 二,2874.有序三元组中的最大值 II

题目与上一题一样,只不过数据范围变大了,不能使用暴力,会超出时间限制。

按照 j 来遍历数组:

        先定义一个数组,从后向前遍历,得到数组后缀最大值,在定义一个数组,从前向后遍历,得到数组前缀最大值,最后按照 j 从前往后遍历。

class Solution {
    public long maximumTripletValue(int[] nums) {
        int n = nums.length;
        long ans = 0;
        int[] suf_max = new int[n];
        suf_max[n-1] = nums[n-1];
        for(int i=n-2; i>=0; i--){
            suf_max[i] = Math.max(suf_max[i+1],nums[i]);
        }
        int[] pre_max = new int[n];
        pre_max[0] = nums[0];
        for(int i=1; i<n; i++){
            pre_max[i] = Math.max(pre_max[i-1],nums[i]);
        }
        for(int j=1; j<n-1; j++){
            ans = Math.max(ans, (long)(pre_max[j-1]-nums[j])*suf_max[j+1]);
        }
        return ans;
    }
}
//解法二
class Solution {
    public long maximumTripletValue(int[] nums) {
        long ans = 0;
        int pre_max = 0;//前缀最大值 - nums[i]
        int max_diff = 0;//(nums[i]-nums[j])最大值
        for(int x : nums){
            //x = nums[k]
            ans = Math.max(ans,(long)max_diff*x);
            //x = nums[j]
            max_diff = Math.max(max_diff,pre_max-x);
            //x = nums[i]
            pre_max = Math.max(pre_max,x);
        }
        return ans;
    }
}

 三,2875.无限数组的最短子数组

 该题是一个滑动窗口题:我们实际上是计算环形数组中,是否有子数组和为 target % sum(nums),如果有就返回 子数组长度 + target / sum * len(nums),没有就返回 -1.

class Solution {
    public int minSizeSubarray(int[] nums, int target) {
        int sum = 0;
        int total = 0;
        int ans = Integer.MAX_VALUE;
        int n = nums.length;
        for(int x : nums) total += x;
        for(int l=0,r=0; l<n; r++){
            sum += nums[r%n];
            while(sum > target%total){
                sum -= nums[l%n];
                l++;
            }
            if(sum == target%total)
                ans = Math.min(ans,r-l+1);
        }
        return ans==Integer.MAX_VALUE?-1:ans+target/total*n;
    }
}

 四,2876.有向图访问计数

class Solution {
    public int[] countVisitedNodes(List<Integer> edges) {
        int n = edges.size();
        List<Integer>[] rg = new ArrayList[n];
        int[] deg = new int[n];
        for(int i=0; i<n; i++)
            rg[i] = new ArrayList<>();
        for(int i=0; i<n; i++){
            int y = edges.get(i);//i -> y
            rg[y].add(i);//统计指向y的节点
            deg[y]++;//统计指向y的节点个数
        }
        //拓扑排序
        Queue<Integer> queue = new LinkedList<>();
        for(int i=0; i<n; i++){
            if(deg[i] == 0)//叶子节点
                queue.add(i);
        }
        while(!queue.isEmpty()){
            int x = queue.poll();
            int y = edges.get(x);//x -> y
            if(--deg[y] == 0)//删除树枝和叶子,保留环
                queue.add(y);
        }

        int[] ans = new int[n];
        for(int i=0; i<n; i++){
            if(deg[i] <= 0) continue;
            List<Integer> ring = new ArrayList<>();
            for(int x = i; ; x = edges.get(x)){
                deg[x] = -1;//防止重复
                ring.add(x);
                if(edges.get(x) == i)
                    break;
            }
            for(int x : ring)
                rdfs(x,ring.size(),rg,deg,ans);
        }
        return ans;
    }
    //得到深度
    void rdfs(int x, int depth, List<Integer>[] rg, int[] deg, int[] ans){
        ans[x] = depth;
        for(int y : rg[x]){
            if(deg[y] == 0)
                rdfs(y,depth+1,rg,deg,ans);
        }
    }
}

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

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

相关文章

矩阵键盘的扫描原理与基础应用

基础知识 原理图 首先需要先将 J5 跳帽放到1和2之间。 表示选择的是矩阵键盘。 简化原理图 扫描原理&#xff1a; 以左上角按键为例。 先向 R1 输出低电平&#xff0c;向 R2&#xff0c;R3&#xff0c;R4 输出高电平。 再然后向 C1&#xff0c;C2&#xff0c;C3&#xff…

在Linux中软链接和硬链接的区别是什么?

2023年10月6日&#xff0c;周五晚上 目录 软链接(SymbolicLink):硬链接(HardLink):区别: 软链接(SymbolicLink): 软链接本身只是一个指向其他文件或目录的指针,不占用任何磁盘空间。软链接的修改或删除不会影响原文件。软链接可以指向不同文件系统中的文件。 硬链接(HardLink…

Cookie和Session详解以及结合生成登录效果

目录 引言 1.Cookie中的数据从哪来数据长啥样&#xff1f; 2.Cookie有什么作用&#xff1f; 3.cookie与session的工作关联&#xff1f; 4.Cookie到哪去&#xff1f; 5.Cookie如何存&#xff1f; 6.Session 7.Cookie与Session的关联与区别 8.通过代码理解 8.1 相关代码 8.2…

c++学习之 继承的方式

在C中&#xff0c;继承方式&#xff08;或继承访问权限&#xff09;有三种&#xff1a;public、protected 和 private&#xff0c;它们决定了派生类&#xff08;子类&#xff09;对基类&#xff08;父类&#xff09;成员的访问权限&#xff0c;它们之间的区别如下&#xff1a; …

局部放电发生因素与局部放电试验的重要性

局部放电发生的几个因素&#xff1a;   ①电场过于集中于某点&#xff1b;   ②固体介质有气泡&#xff0c;有害杂质未除净&#xff1b;   ③油中含水、含气、有悬浮微粒&#xff1b;   ④不同的介质组合中&#xff0c;在界面处有严重的电场畸变。   局部放电试验的重…

【小工具-生成合并文件】使用python实现2个excel文件根据主键合并生成csv文件

1 小工具说明 1.1 功能说明 一般来说&#xff0c;我们会先有一个老的文件&#xff0c;这个文件内容是定制好相关列的表格&#xff0c;作为每天的报告。 当下一天来的时候&#xff0c;需要根据新的报表文件和昨天的报表文件做一个合并&#xff0c;合并的时候就会出现有些事新增…

信息学奥赛一本通-编程启蒙3330:【例56.1】 和为给定数

3330&#xff1a;【例56.1】 和为给定数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 625 通过数: 245 【题目描述】 现给出若干个整数&#xff0c;询问其中是否有一对数的和等于给定的数。 【输入】 共三行&#xff1a; 第一行是整数nn(0<n≤100,000)&…

指数分布优化器(EDO)(含MATLAB代码)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

局部放电发生的现象特点以及解决方案

局部放电发生的现象特点&#xff1a;   1、局部放电是局部过热&#xff0c;电器元件和机械元件老化的预兆&#xff1b;   2、局部放电趋势是局放随着时间的上升指数&#xff0c;这是个曲折的过程&#xff0c;某个阶段可能下降&#xff0c;但某个阶段上升&#xff1b;   3…

C# - Opencv应用(1) 之VS下环境配置详解

C# - Opencv应用&#xff08;1&#xff09; 之VS下环境配置详解 有时候&#xff0c;单纯c#做前端时会联合C实现的dll来落地某些功能由于有时候会用C - Opencv实现算法后封装成dll&#xff0c;但是有时候会感觉麻烦&#xff0c;不如直接通过C#直接调用Opencv在此慢慢总结下C# -…

练[极客大挑战 2019]RCE ME

[极客大挑战 2019]RCE ME 文章目录 [极客大挑战 2019]RCE ME掌握知识解题思路关键paylaod 掌握知识 ​ RCE无数字和字母的bypass&#xff0c;取反 异或 递增 解题思路 打开题目链接&#xff0c;发现是代码审计的题目&#xff0c;而且代码比较简单&#xff0c;似乎关键就是RC…

一个很愚蠢的游戏(中)!!!

系列文章目录 c小游戏_睡觉觉觉得的博客-CSDN博客一个很愚蠢的游戏(上)&#xff01;&#xff01;&#xff01;_睡觉觉觉得的博客-CSDN博客 文章目录 系列文章目录前言一、个人名片二、描述三、代码1.代码 总结 前言 无 &#xff08;嘻嘻&#xff09; 一、个人名片 个人主页&a…

[NewStarCTF 2023 公开赛道] week1

最近没什么正式比赛&#xff0c;都是入门赛&#xff0c;有moectf,newstar,SHCTF,0xGame都是漫长的比赛。一周一堆制。 这周newstar第1周结束了&#xff0c;据说py得很厉害&#xff0c;第2周延期了&#xff0c;什么时候开始还不一定&#xff0c;不过第一周已经结束提交了&#…

python --在2x2的子图中绘制三个子图,并使第三个子图居中

python – 在2x2的子图中绘制三个子图&#xff0c;并使第三个子图居中 基于python&#xff0c;绘制一个2x2的子图范围&#xff0c;但是只显示3个子图&#xff0c;并使得第三个子图居中显示’ 思路&#xff1a; 建立一个2x2的子图前两个正常画&#xff0c;其中第三个子图跨越两…

[开源项目推荐]privateGPT使用体验和修改

文章目录 一.跑通简述二.解读ingest.py1.导入库和读取环境变量2.文档加载3.文档处理&#xff08;调用文件加载函数和文本分割函数&#xff09; 三.injest.py效果演示1.main函数解读2.测试 四.修改代码&#xff0c;使之适配多知识库需求1.修改配置文件&#xff1a;constants.py2…

H桥级联型五电平三相逆变器Simulink仿真模型

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

天线基础知识概述

一、天线方向图(一) 图1 天线方向图的辐射能量 辐射能量完全集中在天线方向图的主瓣。这样就不会有副瓣。所有的辐射能量都在天线的半功率波束宽度内。在这些−3dB边界之外,没有能量辐射。在−3dB范围内,能量分布均匀。为了能够对天线进行计算,通常会对计算进行一些简化甚…

MATLAB中syms函数使用

目录 语法 说明 示例 创建符号标量变量 创建符号标量变量的向量 创建符号标量变量矩阵 管理符号标量变量的假设 创建和评估符号函数 syms函数的作用是创建符号标量和函数&#xff0c;以及矩阵变量和函数。 语法 syms var1 ... varN syms var1 ... varN [n1 ... nM] …

VBA_MF系列技术资料1-197

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

剑指offer——JZ27 二叉树的镜像 解题思路与具体代码【C++】

一、题目描述与要求 二叉树的镜像_牛客题霸_牛客网 (nowcoder.com) 题目描述 操作给定的二叉树&#xff0c;将其变换为源二叉树的镜像。 数据范围&#xff1a;二叉树的节点数 0≤n≤1000 &#xff0c; 二叉树每个节点的值 0≤val≤1000 要求&#xff1a; 空间复杂度 O(n) …