标签: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