0
已解决
赵逸凡
初级启示者
初级启示者
我突然有个思路,就是排序的。
设输入a数组6个数字 32327 29238832 83723788 32327 2 10000000
可以把第四个数32327删除,然后定义一个c数组,专门存有多少个a数组同样的数,于是去重,只留一个32327,32327的数量增加为2
如果有很多数可以优化数量
数组变成32327 29238832 83723788 2 10000000排序
那能否优化成酷町堂2781的思路,使这些数的单位是1,将数组排序成2 4 5 1 3,这样排序可能比较简便
征求大家我的这种优化排序的方法与实现,以及其他优化排序的部分代码
我不是求2781的代码,勿举报
谢谢
赵逸凡在2018-08-14 12:12:16追加了内容
//简易排序
//输入
//将所有值单位变成1,2781的思路
//如果ai=aj,ai.c++,如果哪两个值一样,去重,统计
//排序
#include<bits/stdc++.h>
using namespace std;
int a[10000]/*得分*/,b[10000]/*糖果*/,c[10000]/*数量*/;
int main()
{
int n,m,k;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=1;i<n;i++)
{
if(a[i]>a[i-1])
b[i]=b[i-1]+1;
else b[i]=1;
}
for(int i=n-2;i>=0;i--)
{
if(b[i]<=b[i+1]&&a[i]>a[i+1])
b[i]=b[i+1]+1;
}
for(int i=0;i<n-1;i++)
{
if(a[i]==a[i+1])c[i]++;
}
for(i=n-1;i>=1;i--)
{
for(j=0;j<i;j++)
{
if(b[j]>b[j+1])
{
swap(b[j],b[j+1]);
swap(a[j],a[j+1]);
}
}
}
for(int i=0;i<n;i++)
{
while(c[i]--)cout<<a[i]<<" ";
}
return 0;
}
我是这样想的,优化排序
赵逸凡在2018-08-14 12:13:19追加了内容
我不是求2781的做法,拜托。
我是求优化排序