leetcode---357单周赛

news2025/1/28 19:26:29

题目列表

2810. 故障键盘

2811. 判断是否能拆分数组

2812. 找出最安全路径

2813. 子序列最大优雅度

一、故障键盘

 这题可以直接模拟,时间复杂度是O(n^2),代码如下

class Solution {
public:
    string finalString(string s) {
        string x;
        for(int i=0;i<s.size();i++){
            if(s[i]=='i'){
                reverse(x.begin(),x.end());
            }else{
                x+=s[i];
            }
        }
        return x;
    }
};

当然还有一种优化方法,时间复杂度为O(n)

class Solution {
public:
    string finalString(string s) {
        deque<char> t;//双端队列
        bool flag=true;
        for(auto x:s){
            if(x=='i'){
                flag=!flag;
            }else if(flag){
                t.push_back(x);
            }else{
                t.push_front(x);
            }
        }
        return flag?string(t.begin(),t.end()):string(t.rbegin(),t.rend());
    }
};

 二、判断是否能拆分数组

 这题主要看你有没有明白题目的意思,题目的要求我们将数组拆分成一个个单个元素,并且在拆分过程中满足上诉两个条件,好,根据条件二,我们肯定是每次将数组分成一个单个元素另一个集合,因为这样最有可能使另一个集合满足条件二

按这个思路正常来说,我们会比较数组两端的数字,然后删除较小的那个,以便让剩下的元素集合满足条件二,但是提交后会有一个反例:[9, 2, 5, 7, 2]  12,按照我们之前所想,我们最后剩下的元素会是[9,2],很显然不符合要求,但是这个例子是能过的,因为只要我们最后剩下的元素是[5,7],就能成功拆分哎,看到这里,我们应该就能想到只要有两个连续元素和>=m,那么无论怎么拆分,我们都能保证剩下的集合元素之和>=m(只要这两个关键元素一直在集合中,而这一点我们很容易办到)

注意两个坑:

1.当数组大小为1时,一定满足条件

2.当数组大小为2时,一定也满足条件,因为拆分一次,就直接成为两个单一元素

(如不注意,恭喜直接喜提5/10分钟)

代码如下

class Solution {
public:
    bool canSplitArray(vector<int>& nums, int m) {
        if(nums.size()==1||nums.size()==2)return true;
        for(int i=1;i<nums.size();i++){
            if(nums[i-1]+nums[i]>=m)
                return true;
        }
        return false;
    }
};

 三、找出最安全路径

 这题的思路简单,但是代码量很大,我们首先要算出各个点的安全系数,在用二分法找到答案,这里在求安全系数的时候注意不能求点到小偷的距离,而应该从小偷的位置向外扩展得到其他点的安全系数(用bfs或者dfs都可以),否则会超时,其次二分法的思路来自关键信息---最大化的最小值/最小化的最大值,(简单的说就是当我们知道一个答案区间,并且不知道要找的值,但是我们明确要找的值会尽可能的小或大,遇到这种情况时,可以想想二分)

const int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1};
int**dis;
bool check(int key,int n){
    bool vis[n][n];
    memset(vis,0,sizeof(vis));
    int queue[n*n][2];
    int head=0,tail=0;
    queue[tail][0]=0;
    queue[tail++][1]=0;
    vis[0][0]=true;
    while(head!=tail){
        int x=queue[head][0],y=queue[head++][1];
        for(int k=0;k<4;k++){
            int x0=x+dir[k][0],y0=y+dir[k][1];
            if(x0>=0&&x0<n&&y0>=0&&y0<n&&dis[x0][y0]>=key&&!vis[x0][y0]){
                vis[x0][y0]=true;
                queue[tail][0]=x0,queue[tail++][1]=y0;
            }
        }
    }
    return vis[n-1][n-1];
}
int maximumSafenessFactor(int** grid, int gridSize, int* gridColSize){
    int n=gridSize;
    int queue[n*n][2];
    dis=(int**)malloc(sizeof(int*)*n);
    for(int i=0;i<n;i++){
        dis[i]=(int*)malloc(sizeof(int)*n);
        memset(dis[i],-1,sizeof(int)*n);
    }
    int head=0,tail=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(grid[i][j]){
                queue[tail][0]=i;
                queue[tail++][1]=j;
                dis[i][j]=0;
            }
        }       
    }

    //标记安全系数
    while(head!=tail){
        int x=queue[head][0],y=queue[head++][1];
        for(int k=0;k<4;k++){
            int x0=x+dir[k][0],y0=y+dir[k][1];
            if(x0>=0&&x0<n&&y0>=0&&y0<n&&dis[x0][y0]<0){
                queue[tail][0]=x0,queue[tail++][1]=y0;
                dis[x0][y0]=dis[x][y]+1;
            }
        }
    }

    //二分查找答案
    int left=0,right=fmin(dis[0][0],dis[n-1][n-1]);
    while(left<=right){
        int mid=left+(right-left)/2;
        if(check(mid,n))left=mid+1;
        else right=mid-1;
    }
    for(int i=0;i<n;i++)
        free(dis[i]);
    free(dis);
    return right;
}

 四、子序列最大优雅度

 这题的思路是贪心,其实正常来说,看到这种题目第一反应应该是选或不选的dfs,但是这题的数据范围太大了,我们只能往贪心的思路上走,那么我们该怎么贪呢?或者说我们该怎么在众多方案里找到那个最优的方案呢?生活中买东西常说货比三家,其实这题就是了,关键是我们怎么比较方案的优劣。

首先要比较首先得有个标准方案,然后在拿其他的方案跟它比较,找到最好的,而这题很明显,我们将profit最大的k个作为一个标准,然后看删除哪个加入哪个有可能让优雅度更大

 代码如下

int cmp(int**p1,int**p2)
{
    return (*p2)[0]-(*p1)[0];
}
long long findMaximumElegance(int** items, int itemsSize, int* itemsColSize, int k){
    //将利润从大到小排序
    qsort(items,itemsSize,sizeof(int*),cmp);
    int stack[itemsSize];//记录类型重复出现的最小利润
    int top=0;
    int vis[itemsSize+1];//记录出现过的种类
    long long cnt=0;//记录种类的数量
    memset(vis,0,sizeof(vis));
    long long ans=0,total=0;
    for(int i=0;i<itemsSize;i++){
        if(i<k){//将前k个作为比较的基准,直接加入total
            total+=items[i][0];
            if(vis[items[i][1]]==0){
                vis[items[i][1]]=1;
                cnt++;
            }else{//如果是多次出现,可以进入stack中
                stack[top++]=items[i][0];
            }
        }else if(top&&vis[items[i][1]]==0){//当stack不为空且这个种类没有出现过
            total-=stack[--top];
            total+=items[i][0];
            vis[items[i][1]]=1;
            cnt++;
        }
        ans=fmax(ans,total+cnt*cnt);
    }
    return ans;
}

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

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

相关文章

asp.net core webapi如何执行周期性任务

使用Api执行周期性任务 第一种&#xff0c;无图形化界面1.新建类&#xff0c;继承IJob&#xff0c;在实现的方法种书写需要周期性执行的事件。2.编写方法类&#xff0c;定义事件执行方式3.在启动方法中&#xff0c;进行设置&#xff0c;.net 6中在program.cs的Main方法中&#…

猿人学刷题系列(第一届比赛)——第二题( js 混淆 - 动态cookie 1)

题目&#xff1a;提取全部5页发布日热度的值&#xff0c;计算所有值的加和 地址&#xff1a;https://match.yuanrenxue.cn/match/2 思路分析 本题我们会简单说一下两种不同的方式去处理&#xff0c;一种是不还原混淆代码直接从源代码硬扣生成逻辑&#xff0c;另一种则是还原…

小程序具体开发

window 导航栏 属性名类型默认值作用navigationBarTitleText string字字符串导航栏标题内容navigationBarBackgroundColorHexcolor#000000设置导航栏背景颜色&#xff08;比如荧黄色 #ffa&#xff09;navigationBarTextStylestringwhite设置导航栏标题的颜色&#xff08;仅含有…

运维监控学习笔记2

硬件监控&#xff1a; 1&#xff09;使用IPMI 2&#xff09;机房巡检 路由器和交换机&#xff1a; 使用SNMP&#xff08;简单网络管理协议&#xff09;进行监控。 Linux 安装snmp&#xff1a; yum install -y net-snmp net-snmp-utils 说明&#xff1a;net-snmp是安装在snm…

swager web服务无法显示问题

如果指定了扫描其他包 那么web文件夹里面的就扫描不到 需要加上扫描扫描web的 &#xff0c;默认什么也没有就会扫描web文件夹 但是其他模块的扫描不到 指定了扫描其他模块就需要再次指定扫描该web文件夹

HCIP VRRP技术

一、VRRP概述 VRRP&#xff08;Virtual Router Pedundancy Protocol&#xff09;虚拟路由器冗余协议&#xff0c;既能够实现网关的备份&#xff0c;又能够解决多个网关之间互相冲突的问题&#xff0c;从而提高网络可靠性。 局域网中的用户的终端通常采用配置一个默认网关的形…

私密相册管家-加密码保护私人相册照片安全

App Store史上最安全、最强大、最卓越的私密相册App&#xff01;再也不用担心私密照片视频被别人看见了&#xff01;
私密相册为你提供多重密码保护机制、简单便捷的照片存储空间&#xff0c;完美地将你的私密照片远离一切恶意偷窥者的窥探&#xff01; 【产品功能】
 √ 支…

如何培养对技术的热爱

这篇博文主要针对计算机专业相关的同学&#xff0c;对于理工科专业的同学有一定的借鉴意义&#xff0c;对于其他专业的同学&#xff0c;还请自行取舍。 背景 初学计算机&#xff0c;可能并不是每个人都能对其产生兴趣&#xff0c;更不要说从其中获得快乐。对于如何培养兴趣&a…

Python爬虫:js逆向调式操作及调式中遇到debugger问题

Python爬虫:js逆向调式操作及调式中遇到debugger问题 1. 前言2. js逆向调式操作2.1 DOM事件断点2.2 XHR/提取断点(用于请求接口参数加密处理)2.3 请求返回的数据是加密的2.4 hook定位参数 3. 调式中遇到debugger问题3.1 解决方式(一律不在此处暂停)3.2 问题&#xff1a;点击一律…

Mac超好用软件推荐

没有广告&#xff0c;良心推荐哦 刷到有福啦 非常非常感谢一路支持的大佬&#xff0c;你们的支持是我的荣幸 目录 Keka Free Download Manager Noizio Lite Microsoft 365 ​编辑 LocalSand Hidden Bar Obsidian iWork VMware Fusion SwitchHosts Xmind Listen…

通讯协议037——全网独有的OPC HDA知识一之聚合(六)实际时间最小值

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

matlab使用教程(14)—稀疏矩阵的运算

1.运算效率 1.1计算复杂度 稀疏运算的计算复杂度与矩阵中的非零元素数 nnz 成比例。计算复杂度在线性上还与矩阵的行大小 m 和列大小 n 相关&#xff0c;但与积 m*n&#xff08;零元素和非零元素总数&#xff09;无关。相当复杂的运算&#xff08;例如对稀疏线性方程求解&…

GDB 函数调用栈管理

栈的调用关系&#xff1a;后进先出 1、bt&#xff1a;backtrace 查看栈回溯信息 #0号栈桢表示正在执行的函数&#xff0c;在栈的最顶部。 2、frame n 切换栈桢 3、info f n 查看栈桢信息 4、直接调用函数 格式 p 函数名(参数) 或者 call 函数名(参数)(gdb) p get_time_stam…

GCC的inline内敛函数

GCC&#xff08;GNU Compiler Collection&#xff09;是一个广泛使用的编译器套件&#xff0c;它支持多种编程语言&#xff0c;包括C和C。GCC提供了一些优化特性&#xff0c;其中之一是内联函数&#xff08;inline functions&#xff09;。 内联函数是一种编译器优化技术&…

Xilinx DDR3学习总结——4、添加读写功能

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Xilinx DDR3学习总结——4、添加读写功能 前言APP端口读写测试 前言 前面modelsim已经仿真成功了了DDR3的初始化&#xff0c;但其他端口都设置成了0&#xff0c;现在就需要对…

【Spring Boot】夺名连环问(持续更新ing)

Spring的了解与特性 简单介绍&#xff1a;快速开发Spring项目的脚手架。简化Spring应用的初始搭建以及开发过程。 特性 提供了很多内置的Starter结合自动配置&#xff0c;对主流框架的无配置集成、开箱即用。即不需要自己去引入很多依赖。 并且管理了常用的第三方依赖的版本&…

DAY20

题目一 一个字符串 最少分隔几个部分 让它全都是回文字符串 做一个dp[][]数组 dp[i][j] 表示i....j位置上的字符串是否为回文字符串 依赖于dp[i1][j-1] 也就是左边界缩一个格子 右边界缩一个格子 basecase 对角线 dp[i][i]只有一个字符 必为回文 最后一列 倒数第二行的格子…

SpringBoot案例-部门管理-修改

目录 前言 查看页面原型&#xff0c;明确需求 页面原型 需求 阅读接口文件 思路分析 功能接口开发 控制层&#xff08;Controller类&#xff09; 业务层&#xff08;Service类&#xff09; 业务类 业务实现类 持久层&#xff08;Mapper类&#xff09; 接口测试 前…

网络编程小项目-tftp下载

tftp下载模型 TFTP通信过程总结 服务器在69号端口等待客户端的请求服务器若批准此请求&#xff0c;则使用 临时端口 与客户端进行通信。每个数据包的编号都有变化&#xff08;从1开始&#xff09;每个数据包都要得到ACK的确认&#xff0c;如果出现超时&#xff0c;则需要重新发…