码迷,mamicode.com
首页 > 其他好文 > 详细

uva 11078 Open Credit System

时间:2017-10-02 13:59:40      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:i++   最大   style   namespace   name   net   system   位置   class   

https://vjudge.net/problem/UVA-11078

题意:

给出一个整数序列,要求找出两个位置i,j(i < j),Ai - Aj的值最大,并且输出这个最大值。

思路:

原来我考虑的是一边遍历,一边排序,求Aj - Ai的最小值,然后总的复杂度是O(NlogN),但是没有想到这样都tle了,贴上代码警示。

 1 #include <stdio.h>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int a[100005];
 6 
 7 int main()
 8 {
 9     int t;
10 
11     scanf("%d",&t);
12 
13     while(t--)
14     {
15         int n;
16 
17         scanf("%d",&n);
18 
19         int ans = 100000000;
20 
21         for (int i = 1;i <= n;i++)
22         {
23             scanf("%d",&a[i]);
24         }
25 
26         //int maxn = a[1];
27 
28         for (int i = 2;i <= n;i++)
29         {
30             sort(a+1,a+i);
31 
32             ans = min(ans,a[i] - a[i-1]);
33         }
34 
35         printf("%d\n",-ans);
36     }
37 
38     return 0;
39 }

后来呢,那么这个都过不了,只有用线性的时间喽,所以就动态更新这个坐标之前的最大值,那么最大值肯定是某个坐标前面的最大值静减去当前值,所以就可以O(N)得出答案。

代码:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int a[100005];
 6 
 7 int main()
 8 {
 9     int t;
10 
11     scanf("%d",&t);
12 
13     while(t--)
14     {
15         int n;
16 
17         scanf("%d",&n);
18 
19         int ans = -100000000;
20 
21         for (int i = 1;i <= n;i++)
22         {
23             scanf("%d",&a[i]);
24         }
25 
26         int maxn = a[1];
27 
28         for (int i = 2;i <= n;i++)
29         {
30             ans = max(maxn - a[i],ans);
31 
32             maxn = max(a[i],maxn);
33         }
34 
35         printf("%d\n",ans);
36     }
37 
38     return 0;
39 }

 

uva 11078 Open Credit System

标签:i++   最大   style   namespace   name   net   system   位置   class   

原文地址:http://www.cnblogs.com/kickit/p/7620016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!