swust-oj 0237心得
2018-02-13 16:40
239 查看
题目:给你N个正整数,求两两之差的绝对值之和。 比如有4个数分别为 3,2,6,5,
则答案为 |3-2| + |3-6| + |3-5| + |2-6| + |2-5| + |6-5| =14
我试了三种方法,代码片段如下
一: for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
zhong=a[i]-a[j];
if(zhong<0)
{
sum=sum-zhong;
}
else sum=sum+zhong;
}
}
二:scanf("%d",&a[0]);
for(i=1;i<n;i++)
{
scanf("%d",&a[i]);
for(j=0;j<i;j++)
{
zhong=a[j]-a[i];
if(zhong<0) sum=sum-zhong;
else sum=sum+zhong;
}
}
三:for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
sum=0;
for(i=0;i<n;i++)
{
sum=sum-a[i]*(n-(i+1)-i);
}
可以看出,第一种方法最复杂,第三种方法最简单,前面两种都有两个for循环,时间复杂度为O(n²),
而第三种的时间复杂度为O(n),所以在此题中第三种解法最佳。
则答案为 |3-2| + |3-6| + |3-5| + |2-6| + |2-5| + |6-5| =14
我试了三种方法,代码片段如下
一: for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
zhong=a[i]-a[j];
if(zhong<0)
{
sum=sum-zhong;
}
else sum=sum+zhong;
}
}
二:scanf("%d",&a[0]);
for(i=1;i<n;i++)
{
scanf("%d",&a[i]);
for(j=0;j<i;j++)
{
zhong=a[j]-a[i];
if(zhong<0) sum=sum-zhong;
else sum=sum+zhong;
}
}
三:for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
sum=0;
for(i=0;i<n;i++)
{
sum=sum-a[i]*(n-(i+1)-i);
}
可以看出,第一种方法最复杂,第三种方法最简单,前面两种都有两个for循环,时间复杂度为O(n²),
而第三种的时间复杂度为O(n),所以在此题中第三种解法最佳。
相关文章推荐
- Delete Numbers(swust oj 0700)
- Pipeline(swust oj 0695)
- C语言BFS(5)___TT与魔法师(swust oj 2464)
- [Swust OJ 1094]--中位数(巧用set,堆排序)
- SWUST_OJ 水王发帖排序
- swust.oj.1013
- [Swust OJ 249]--凸包面积
- [Swust OJ 581]--彩色的石子(状压dp)
- 线段树离线 SWUST OJ 2459 Submissions of online judge
- [Swust OJ 781]--牛喝水
- [Swust OJ 715]--字典序问题(组合数预处理/数位dp)
- [Swust OJ 763]--校门外的树 Plus(暴力枚举)
- [Swust OJ 352]--合并果子(贪心+队列模拟)
- [Swust OJ 552]--拼音教学(找规律)
- 【swust.oj_0415】Digital Roots
- swust oj one+two=3(0287)——单词和数字的转化
- 杭电Oj 1004 1005 1008心得
- [Swust OJ 632]--集合运算(set容器)
- 【swust.oj_1066】有向图的邻接矩阵存储强连通判断
- swustoj(木材加工(0436))