zoukankan      html  css  js  c++  java
  • 算法题——数组内有序对的最大距离

    转自:http://www.cnblogs.com/qieerbushejinshikelou/p/3916958.html

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

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

    学习之处:对于解决算法复杂度过高的问题,往往可以通过增加辅助空间,辅助空间有两种方式,一种方式是用Hashtable,另外一种方式是通过记录历史信息,之前的最大值啊,之前的最小值啊。

    代码

    复制代码
     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 }
    复制代码
  • 相关阅读:
    android开发 软键盘出现后 防止EditText控件遮挡 总体平移UI
    jQuery中this与$(this)的差别
    纯手写wcf代码,wcf入门,wcf基础教程
    JavaScript权威指南第01章 JavaScript 概述
    Python
    微信支付界面中文乱码问题
    EasyUI基础入门之Pagination(分页)
    Maximum Subarray
    CF1063F String Journey
    排序
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4562644.html
Copyright © 2011-2022 走看看