当前位置: 首页 > news >正文

牛客网NC276110题解:小红的数组重排

牛客网NC276110题解:小红的数组重排

题目解析

在这里插入图片描述

算法思路

  1. 对数组进行排序(非降序)
  2. 检查特殊情况:
    • 如果存在三个连续相等的元素,则无解
    • 如果前两个元素都是0,则无解
  3. 若不存在特殊情况,则排序后的数组即为所求

为什么这样做是正确的?

当我们对数组排序后,相邻元素的乘积往往会递增。但有两种特殊情况需要排除:

  1. 三个连续相等的数:假设有三个连续相等的数x,那么会出现x×x = x×x,不满足严格递增
  2. 开头两个0:如果前两个元素都是0,则a₁×a₂ = 0,而后续任何包含0的乘积也为0,无法形成严格递增序列

代码实现

#include <bits/stdc++.h>
using namespace std;
int main()
{int n;cin>>n;int k[n];for(int i=0;i<n;i++){cin>>k[i];}sort(k,k+n);//数组从小到大排列。for(int i=0;i<n-2;i++){if(k[i]==k[i+1]&&k[i+1]==k[i+2]){cout<<"NO";return 0;}}if(k[0]==k[1]&&k[0]==0){cout<<"NO";return 0;}cout<<"YES"<<endl;for(int i=0;i<n;i++){cout<<k[i]<<" ";}return 0;
}

复杂度分析

  • 时间复杂度:O(nlogn),主要来自排序操作
  • 空间复杂度:O(n),存储输入数组

示例分析

以示例1为例:[7, 2, 5, 1]

  1. 排序后:[1, 2, 5, 7]
  2. 检查特殊情况:
    • 无三个连续相等的数
    • 开头两个数不都是0
  3. 输出排序后的数组:1 2 5 7

验证:1×2 < 2×5 < 5×7,即 2 < 10 < 35 ✓

注意题目示例输出了1 5 2 7,这也是正确答案的一种,因为:1×5 < 5×2 < 2×7,即 5 < 10 < 14 ✓

总结

这道题的关键是发现排序后的数组通常能满足要求,只需排除特殊情况。解题思路简洁明了,实现也很高效。

相关文章:

  • 低延迟与高性能的技术优势解析:SmartPlayer VS VLC Media Player
  • 湖北理元理律师事务所:债务优化服务的四维创新实践
  • C++23 范围迭代器作为非范围算法的输入 (P2408R5)
  • Ubuntu22.04开机运行程序
  • 自动化:批量文件重命名
  • OSI七层模型和TCP/IP的五层(四层模型)
  • MLLM常见概念通俗解析(三)
  • QT6 源(108)篇二:阅读与注释菜单栏里的菜单对象 QMenu,先是成员函数,后是信号函数的测试
  • React路由(React学习笔记_09)
  • 计算机组成与体系结构:Snooping-Based Protocols(监听式协议)
  • 计算机的基本组成与性能
  • 【八股战神篇】MySQL高频面试题
  • 【Day29】
  • Muduo网络库大总结
  • C语言练手磨时间
  • 用算术右移实现逻辑右移及用逻辑右移实现算术右移
  • C++编程起步项目
  • golang 安装gin包、创建路由基本总结
  • 【架构美学】Java 访问者模式:解构数据与操作的双重分发哲学
  • tauri2项目使用sidcar嵌入可执行文件并使用命令行调用
  • 从《缶翁的世界》看吴昌硕等湖州籍书画家对海派的影响
  • 香港特区政府强烈谴责美参议员恐吓国安人员
  • 61岁云浮市律师协会副会长谭炳光因突发疾病逝世
  • 贵州仁怀通报“正新鸡排鸡腿里全是蛆”:已对同类产品封存送检
  • 媒体评欧阳娜娜遭民进党当局威胁:艺人表达国家认同是民族大义
  • 泽连斯基已离开土耳其安卡拉