题解 | #特殊排序#双指针去除最大值
特殊排序
https://www.nowcoder.com/practice/57f0f528bff149be9580af66f6292430
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int get_num[1001];
//题目的意思是首先从中挑选出最大值(可能多个)然后删除一个最大数,再进行排序
void bubblesort(int len)
{
//get_num的长度
for(int i=0;i<len-1;i++)
{
for(int j=len-1;j>i;j--)
{
if(get_num[j-1]>get_num[j])
{
int temp;
temp = get_num[j];
get_num[j] = get_num[j-1];
get_num[j-1] = temp;
}
}
}
}
int main() {
int n;
while(scanf("%d",&n) != EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d",&get_num[i]);
}
int maxnum = get_num[0];
for(int i=0;i<n;i++)
{
if(get_num[i] > maxnum)
{
maxnum = get_num[i];
}
}
int slow=0,fast=0;
//双指针用来去除一个最大值
while(fast<n)
{
if(get_num[fast] != maxnum)
{
get_num[slow] = get_num[fast];
++slow;
++fast;
}
else
{
if(fast-slow == 1)
{
//去掉一个了,不用继续去
get_num[slow] = get_num[fast];
++slow;
++fast;
}
else
{
//还没去掉有一个,fast移动slow不移动,错开一个身位然后填空
++fast;
}
}
}
//最终的slow就是新数组的长度
if(slow==0 && get_num[0]==maxnum)
{
printf("%d\n",maxnum);
printf("%d\n",-1);
}
else
{
bubblesort(slow);
printf("%d\n",maxnum);
for(int i=0;i<slow;i++)
{
printf("%d ",get_num[i]);
}
printf("\n");
}
}
return 0;
}
其他内容(排序以及找最大值)都很常规,在这里写一个用双指针去最大值的思路,其他大佬没有写,菜鸡补一个
老板电器公司氛围 197人发布