题解 | #特殊排序#
特殊排序
https://www.nowcoder.com/practice/57f0f528bff149be9580af66f6292430
#include <algorithm>
#include <iostream>
#include<cstdio>
#include <vector>
using namespace std;
int main() {
int a,b,counter;
vector<int> arr; //借用vector的popback函数来完成对最大值的去除
while (cin >> a) { // 注意 while 处理多个 case
// cout << a + b << endl;
for (int i = 0; i < a; i++)
{
cin >> b;
arr.push_back(b); //数组成型
}
b = arr[0]; //默认最大值
counter = 0; //最大值标记
for (int i = 0; i < a; i++)
{
if(b < arr[i])
{
counter = i; //扫描一遍数组,获取最大值和标记
b = arr[i];
}
}
printf("%d\n",b);
if (a == 1) { //处理特殊情况
b = -1;
printf("%d\n",b);
return 0;
}
arr[counter] = arr[a-1]; //把最大值交换到末尾
arr.pop_back(); //pop末尾,完成对最大值的去除
sort(arr.begin(),arr.end()); //灵魂一步,排序,对vector的排序需要begin与end两个函数来获取其内存位置
for (int i = 0;i < a - 1; i++) { //完成排序,输出
printf("%d ",arr[i]);
}
}
}
// 64 位输出请用 printf("%lld")
使用vector来操作,输入即是push,扫描一遍数组获取最大值,把最大值与末尾的数值交换,pop末尾,排序,输出。

查看7道真题和解析