CSDN周赛65期简要题解

最近几期周赛里,貌似 Python 又变成 C 站的亲儿子了。输入形式是列表还不过瘾,现在输出形式也要求是列表,而且是连一个逗号、空格、中括号都不能少的 Python 标准列表形式。虽然对 Python 来说是信手拈来,但总要考虑一下其他编程语言选手的感受吧。纵观这么多在线评测网站,同类型的题目至少会要求譬如“按行输出,每行数字之间空格隔开”这样,而像 C 站这样输入输出的格式这么随意的,还真是独一家。长此以往,越来越多的人也不愿意参与了。


本期非编程题属于我的知识盲区,但正确答案并不难得到,和往常一样,这里就不废话了。

编程题:

第一题 数组排序

给你一个整数数组 nums ,请你将数组按照每个值的频率降序排序。如果有多个值的频率相同,请你按照数值本身将它们降序排序。 请你返回排序后的数组。

参数限制: 1 <= nums.length <= 100, -100 <= nums[i] <= 100

题目很简单,就是数组的两次排序,内置函数就能完成。但是离大谱的是本题没有用例。随便输入什么,然后点运行都显示 AC,但是却一分没有。我记得以前每次周赛前还会有个测试链接(我就曾因为发现了测试链接而被取消过成绩),难道现在已经没有人测试了吗?

就算是有用例,观察一下示例中的输入输出:

正如文章开头吐槽的那样,输出也要求列表形式 —— 估计能把 C 难受死。

不过一维列表应该还算 OK,中括号和逗号的位置都是固定的,就当组合成字符串输出了。而下一题,却要求二维列表也是以这个格式输出。

第二题 求解秩矩阵

给你一个 m x n 的矩阵 matrix ,请你返回一个新的矩阵 answer ,其中 answer[row][col] 是 matrix[row][col] 的秩。这里定义的每个元素的秩是一个整数,表示这个元素相对于其他元素的大小关系,它按照如下规则计算:

  1. 秩是从 1 开始的一个整数。
  2. 如果两个元素 p 和 q 在 同一行 或者 同一列 ,那么: 如果 p < q ,那么 rank(p) < rank(q) 如果 p == q ,那么 rank(p) == rank(q) 如果 p > q ,那么 rank(p) > rank(q) 秩 需要越 小 越好。

题目保证按照上面规则 answer 数组是唯一的。

参数说明: m == matrix.length n == matrix[i].length 1 <= m n <= 500 -10e9 <= matrix[row][col] <= 10e9

题目给出的三个示例:

而且离谱的是,如果用它提供的“自测”功能,把输入输出放进去,会发现示例中的数组没有空格,而正确答案的输出数组中元素之间却是要求有空格的,也就是 Python 那种列表输出方式。所以,即使千辛万苦做到示例的格式,从而通过了示例,也无法通过本题任何一个实际用例。

而这种输入输出简直就是为 Python 量身定制的,因为压根不需要考虑输出的问题:

matrix = eval(input())
# matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix)
分析

抛开上面这种题目输出格式的问题不谈,其实本题考察的内容和数独很相似。如果把最终输出的结果是一个二维列表,里面每个元素都是相应位置的原数组的“秩”,要求满足条件的这个“秩”尽量要小,一个比较直观的办法,就是不断地从小到大依次去尝试每个数字的“秩”,直到符合条件为止。

拿示例中的 [[20,-21,14],[-19,4,19],[22,-47,24],[-19,4,19]] 为例,直观且暴力的方法就是:

  1. 先检查第一个元素 20,然后看同行同列有没有比它小的;
  2. 很显然,同行同列都有比它小的,-21 和 -19;
  3. 然后分别检查 -21 和 -19 所在的行有没有比他们更小的数字;
  4. -21 所在的列有更小的 -47,但 -19 所在的行和列都没有更小的了,所以 -19 的“秩” 为最小的 1;
  5. 继续检查 -47,它所在的行和列都没有更小的了,所以 -47 的“秩”也为最小的 1;
  6. 然后再回退一步,检查 -21,除了 -47 之外,同行同列没有比 -21 更小的数字了,所以我们暂时为它赋值“秩”为 2,因为我们不确定,其他地方是否也有 -21,但是却存在 -47 和 -21 之间的数字;
  7. 不断重复上述步骤,如果遇到第 6 步提到的冲突情况,则取更大的值,直到所有数字都满足要求。

其实在这个过程中,我们就可以看出,满足要求的“秩”有以下两个特征:

  1. 相同数字的“秩”是一样的;
  2. 不同数字可以有相同的“秩”,只要它们在各自的行、列满足要求。

所以,类似深度搜索,我们可以使用递归来解决问题。结合上面直观暴力的方法,最终思路如下:

  1. 从任意一个数字开始检查,它的秩要比它所在行或列里比它小的数字里最大的“秩”加一;
  2. 如果它的下一个数字和它相等,则继续查找下一个;
  3. 行、列里满足条件的数字如果还没有“秩”,则进入递归,回到第 1 步;
  4. 如果行、列里没有比该数字更小的数字,则该数字的“秩”为一,递归返回。

上述递归的难点在于,每个数字要额外记录比它小的数字里最大的数字的位置。可以额外使用一个三维数组来记录,每个数字记录它的行和列里下一个数字的行列信息,或者就直接在每次查找的时候再排序进行查找。

第二个要注意的地方就是相等的数字的“秩”也相同,所以当某数字的下一个数字和自己相等时,如果它没有“秩”,则跳过,继续查找下一个,如果它已经有了“秩”,则直接返回,不执行加一操作。

本期客观因素太多,造成众多选手未能得分,并不是因为题目有多难,所以代码就不献丑了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于vue实现权限控制,动态渲染菜单栏

Vue菜单权限动态路由 实现原理&#xff1a;用户登录&#xff0c;服务端返回相关权限&#xff0c;进行持久化存储&#xff0c;筛选动态路由&#xff0c;同时菜单栏也需动态渲染 静态路由 静态路由&#xff0c;也叫常量路由&#xff0c;即所有角色都可以访问到的路由界面。如:…

chrome解决http自动跳转https问题

1.地址栏输入&#xff1a; chrome://net-internals/#hsts 2.找到底部Delete domain security policies一栏&#xff0c;输入想处理的域名&#xff0c;点击delete。 3.再次访问http域名不再自动跳转https了。

使用的华为云RDS数据库不小心把数据删了

目录 前言恢复qp文件帮助文档表级时间点恢复删除数据的时候要注意 前言 华为云查数据的时候前面是有个序号的&#xff0c;删除数据的时候不小心把序号看成id了&#xff0c;导致误删数据。 注&#xff1a;图片如果看不清楚可以点击放大观看&#xff01; 恢复qp文件 华为云每天…

宋浩线性代数笔记(二)矩阵及其性质

更新线性代数第二章——矩阵&#xff0c;本章为线代学科最核心的一章&#xff0c;知识点多而杂碎&#xff0c;务必仔细学习。 重难点在于&#xff1a; 1.矩阵的乘法运算 2.逆矩阵、伴随矩阵的求解 3.矩阵的初等变换 4.矩阵的秩 &#xff08;去年写的字&#xff0c;属实有点ugl…

推荐几个Windows iso镜像下载的网站

文章目录 1. 微软官网2. MSDN网站3. 系统库(xitongku)4. 其他网站最后总结 给大家推荐几个 Windows iso镜像下载网站 1. 微软官网 入口地址&#xff1a;https://www.microsoft.com/zh-cn/software-download 以下载Windows11为例&#xff1a; 1&#xff09;找到下载Windows11…

Modbus RTU通信应用

一、功能概述 1.1 概述 Modbus串行通信协议是Modicon公司在1970年开发的。 Modbus串行通信协议有Modbus ASCII和Modbus RTU两种模式&#xff0c;Modbus RTU协议通信效率较高&#xff0c;应用更加广泛。 Modbus RTU协议是基于RS232和RS485串行通信的一种协议&#xff0c;数据通…

#Gitee 的 WebHooks 实现代码自动化部署#

1:安装git 2:php同步脚本 3:配置webhook 一&#xff1a;安装git服务 // 查看是否安装了git git --version// 如果未安装&#xff0c;执行安装命令 yum install git 2&#xff1a;编写同步PHP脚本 <?php //理发店钩子 error_reporting(1); set_time_limit(0); // 部署目…

MySQL-Explain简版

文章目录 前言1.什么是explain2.explain有什么用3.explain怎么用理解explain的列代表的意思id列select_type列table列partitions列type列possible_keys列key列key_len列ref列rows列Extra列 前言 没必要记吧&#xff0c;忘了直接查 1.什么是explain 在select语句之前增加explai…

C++面向对象三大特性 -- 多态(重点)

目录 一、什么是多态&#xff1f;二、多态的定义和实现2.1 虚函数2.2 虚函数的重写2.3 多态的构成条件2.4 C11中的override和final2.5 重写(覆盖)&#xff0c;重载&#xff0c;重定义(隐藏)的对比 三、多态的原理3.1 虚函数表3.2 再谈多态的条件3.3 动态绑定和静态绑定3.4 单继…

微分流形2:流形上的矢量场和张量场

来了来了&#xff0c;切向量&#xff0c;切空间。流形上的所有的线性泛函的集合&#xff0c;注意是函数的集合。然后取流形上的某点p&#xff0c;它的切向量为&#xff0c;线性泛函到实数的映射。没错&#xff0c;是函数到实数的映射&#xff0c;是不是想到了求导。我们要逐渐熟…

基于FPGA实现OSD功能

简介 基于FPGA平台实现简单的OSD的功能,对于FPGA实现OSD只能实行简单的画框和文字叠加,如果实现复杂的车道线画框,则没法实现(起码我个人感觉,这个功能没有思路执行)。 FPGA实现OSD功能需要7系列平台,以及VDMA、OSD等Xilinx公司的IP使用(本功能工程采用Vivado2017.4平台…

OSCP最新考试QA

枚举提示 初始枚举 对你的目标进行光线扫描。 例如&#xff0c;扫描您的考试机器上的10个常见端口。 在等待彻底和更长时间的扫描时&#xff0c;手动与找到的服务交互。 仔细列举 避免对多个目标进行大量扫描。 运行不安全扫描后还原计算机。 重新运行扫描以确保所有信…

【Unity3D日常开发】Unity3D中比较string字符串的常用方法

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 字符串string的比较有很多方法&#xff0c;比如&#xff1a; …

MongoDB原生语句更新嵌套数组的值

一、更新一层嵌套数组 首先执行MongoDB原生语句脚本在user集合中产生一些样本数据,如下所示: db.user.insert({"_id":1,"title":"爱情公寓3","students":[{"student_id":1001,"student_name":"林宛瑜&quo…

表单验证:输入的字符串以回车分隔并验证是否有

公司项目开发时&#xff0c;有一个需求&#xff0c;需要对输入的字符串按回车分隔并验证是否有重复项&#xff0c;效果如下&#xff1a; 表单代码&#xff1a; <el-form-item label"IP地址条目&#xff1a;" prop"ipAddressEntry"><el-inputtype&…

计算机内存中的缓存Cache Memories

这篇写一下计算机系统中的缓存Cache应用场景和实现方式介绍。 Memory hierarchy 在讲缓存之前&#xff0c;首先要了解计算机中的内存结构层次Memory hierarchy。也就是下图金字塔形状的结构。 从上到下&#xff0c;内存层次结构如下&#xff1a; 寄存器&#xff1a;这是计算机…

FPGA_学习_13_方差计算小模块

测距器件APD的性能与器件本身的温度、施加在APD的偏置电压息息相关。 在不同的温度下&#xff0c;APD的偏压对测距性能的影响非常大。 要确定一个合适的APD的偏压Vopt&#xff0c;首先你要知道当前温度下&#xff0c;APD的击穿电压Vbr&#xff0c;一般来讲&#xff0c;Vopt Vb…

桥梁安全生命周期监测解决方案

一、方案背景 建筑安全是人们生产、经营、居住等经济生活和人身安全的基本保证&#xff0c;目前我国越来越多的建筑物逐 步接近或者已经达到了使用年限&#xff0c;使得建筑物不断出现各种安全隐患&#xff0c;对居民的人身安全和财产安全产 生不利影响&#xff0c;因此房…

gitee 配置ssh 公钥(私钥)

步骤1&#xff1a;添加/生成SSH公钥&#xff0c;码云提供了基于SSH协议的Git服务&#xff0c;在使用SSH协议访问项目仓库之前&#xff0c;需要先配置好账户/项目的SSH公钥。 绑定账户邮箱&#xff1a; git config --global user.name "Your Name" git config --glob…

看了2023年的一线互联网公司时薪排行榜!值得思考

前言 根据最近针对国内的一线互联网企业做的调研&#xff0c;汇总了他们的平均时薪水平&#xff0c;最终出了一个排行榜&#xff01; 首先我们来看下&#xff0c;排行榜分哪几个Level&#xff0c;分别为初级、中级、高级、资深、专家/架构这五个&#xff0c;主要根据工程师的…