首页 > 其他 > 详细

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

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

题目:给定一个数组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

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!