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

算法题——数组内有序对的最大距离

时间:2014-08-16 22:19:21      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   strong   for   div   

题目:给定一个数组A,对于下标i < j,有A[i] < A[j],求j - i 的最大值。

 

思路:先正序遍历一次,利用一个辅助数组,记录每个元素的左边子数组中最小值的下标;然后倒序遍历,维持两个指针,初始都指向最后一个元素,通过移动两个指针,找出最大距离。

 

代码

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 int maxDist(int num[], int n)
 6 {
 7     if(n < 2)
 8         return 0;
 9 
10     vector<int> left_min_pos(n, 0);
11     int cur_min_pos = 0;
12     int max_dist = 0;
13 
14     for(int i = 1; i < n; ++i)
15     {
16         if(num[i] < num[cur_min_pos])
17         {
18             left_min_pos[i] = i;
19             cur_min_pos = i;
20         }
21         else
22         {
23             left_min_pos[i] = cur_min_pos;
24         }
25     }
26 
27     for(int i = n - 1, j = n - 1; i >= 0; )  //i < j
28     {
29         i = left_min_pos[i];
30         
31         if(num[j] >= num[i])    //找到一个有序对,或是同一个元素
32         {
33             if(j - i > max_dist) 
34             {
35                 max_dist = j - i;
36             }
37             --i;            //对于当前的i来说,j已是最远的,所以固定住j,i往左走,找到更大的j-i
38         }
39         else
40         {
41             --j;            //不是有序对,对于j来说,上一个i已是最远的,固定住i,j往左走
42         }
43     }
44 
45     return max_dist;
46 }
47 
48 int main()
49 {
50     const int n = 5;
51     int num[n] = {3, 6, 4, 1, 2};
52 
53     cout << maxDist(num, n) << endl;
54 
55     return 0;
56 }

 

算法题——数组内有序对的最大距离,布布扣,bubuko.com

算法题——数组内有序对的最大距离

标签:style   blog   color   os   io   strong   for   div   

原文地址:http://www.cnblogs.com/qieerbushejinshikelou/p/3916958.html

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