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

牛客网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 ✓

总结

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

http://www.xdnf.cn/news/7089.html

相关文章:

  • NY337NY340美光固态颗粒NC010NC012
  • 46、什么是Windows服务,它的⽣命周期与标准的EXE程序有什么不同?
  • 网络编程-select(二)
  • SQL脚本规范
  • STM32H562----------启动时钟分析
  • C#中的成员常量:编译时的静态魔法
  • 静态网站部署:如何通过GitHub免费部署一个静态网站
  • 【提高+/省选−】洛谷P1495 —— 【模板】中国剩余定理(CRT)/ 曹冲养猪
  • 【聚类】 K-means
  • 前端获取用户的公网 IP 地址
  • 08 Nginx模块
  • AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》
  • 二:操作系统之进程通信(IPC)
  • WRFOUT投影转换——兰伯特转等经纬度
  • 学习黑客HTTP 请求头
  • LangGraph Platform 快速入门
  • 如何设置 MySQL 的 root 密码:详细指南
  • LLM笔记(九)KV缓存调研
  • 利用jieba分词交集运算,挑选出相同身份证
  • 华为云Astro轻应用创建业务对象(BO)的概念梳理
  • 如何用mockito+junit测试代码
  • [LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
  • muduo库TcpServer模块详解
  • 设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式
  • Linux梦开始的地方
  • 面试题总结一
  • 2025.05.17得物机考笔试真题第一题
  • iOS 工厂模式
  • 【图像生成大模型】Step-Video-T2V:下一代文本到视频生成技术
  • 数据结构与算法学习笔记(Acwing提高课)----动态规划·背包模型(四)