酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

题目背景 english statement. you must submit your code at the chinese version of the statement. 题目描述 给定一个长为 𝑛 n 的序列 𝑎 1 , 𝑎 2 , 𝑎 3 , … , 𝑎 𝑛 a 1 ​ ,a 2 ​ ,a 3 ​ ,…,a n ​ ,你需要执行 𝑘 k 次操作使这个序列为空。 每次操作可以执行下列内容之一: 选择两个数 𝑖 , 𝑗 i,j,交换 𝑎 𝑖 , 𝑎 𝑗 a i ​ ,a j ​ (需要满足 1 ≤ 𝑖 < 𝑗 ≤ 𝑛 1≤i<j≤n)。 选择两个数 𝑖 , 𝑗 i,j,删除 𝑎 𝑖 , 𝑎 𝑖 + 1 , … , 𝑎 𝑗 a i ​ ,a i+1 ​ ,…,a j ​ (需要满足 1 ≤ 𝑖 ≤ 𝑗 ≤ 𝑛 1≤i≤j≤n,且 𝑎 𝑖 = 𝑎 𝑗 a i ​ =a j ​ )。 请输出最小的操作数 𝑘 k。 输入格式 第一行输入一个正整数 𝑇 t( 1 ≤ 𝑇 ≤ 5 1≤t≤5),表示有 𝑇 t 个测试数据。 对于每个测试数据: 第一行输入一个正整数 𝑛 n( 1 ≤ 𝑛 ≤ 1 0 5 1≤n≤10 5 ),表示序列长度为 𝑛 n。 第二行输入 𝑛 n 个正整数 𝑎 1 , 𝑎 2 … 𝑎 𝑛 a 1 ​ ,a 2 ​ …a n ​ ( 0 ≤ 𝑎 𝑖 ≤ 1 0 9 0≤a i ​ ≤10 9 )。 输出格式 对于每个测试数据输出一个正整数 𝑘 k,表示最少的操作次数。 输入输出样例 输入 #1复制 2 5 1 2 3 2 3 3 1000000000 1000000000 99999999 输出 #1复制 2 2 说明/提示 数据范围 子任务 分值 限制 1 1 10 10 𝑛 ≤ 3 n≤3 2 2 20 20 𝑛 ≤ 10 n≤10 3 3 20 20 𝑎 𝑖 ≤ 2 a i ​ ≤2 4 4 10 10 保证所有 𝑎 𝑖 a i ​ 相等 5 5 40 40 - 对于 100 % 100%,语言方向:C++,系统环境:Linux,代码风格:时间复杂度优先

```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int minOperations(vector<int>& nums) { int n = nums.size(); int opCount = 0; // 先对数组进行排序,方便后续操作 sort(nums.begin(), nums.end()); int i = 0; while (i < n) { int j = i; // 找到连续相同的数字段 while (j < n && nums[j] == nums[i]) { j++; } // 如果相同数字段长度大于 1 if (j - i > 1) { opCount++; } i = j; } return opCount; } int main() { int T; cin >> T; while (T--) { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } cout << minOperations(nums) << endl; } return 0; } // 1. 注意输入数据的范围,避免越界。 // 2. 排序操作的时间复杂度为 O(nlogn),要考虑对整体性能的影响。 // 3. 循环中的边界条件要仔细检查,确保逻辑正确。 ``` [2024-12-21 16:26:29 | AI写代码神器 | 331点数解答]
相关提问