Algorithm for finding the maximum difference in an array of numbers

后端 未结 7 511
夕颜
夕颜 2021-02-04 03:57

I have an array of a few million numbers.

double* const data = new double (3600000);

I need to iterate through the array and find the range (th

7条回答
  •  终归单人心
    2021-02-04 04:11

    Idea of algorithm:

    Take the first 1000 values of data and sort them
    The last in the sort - the first is range(data + 0, data + 999).
    Then remove from the sort pile the first element with the value data[0]
    and add the element data[1000]
    Now, the last in the sort - the first is range(data + 1, data + 1000).
    Repeat until done

    // This should run in (DATA_LEN - RANGE_WIDTH)log(RANGE_WIDTH)
    #include 
    #include 
    using namespace std;
    
    const int DATA_LEN = 3600000;
    double* const data = new double (DATA_LEN);
    
    ....
    ....
    
    const int RANGE_WIDTH = 1000;
    double range = new double(DATA_LEN - RANGE_WIDTH);
    multiset data_set;
    data_set.insert(data[i], data[RANGE_WIDTH]);
    
    for (int i = 0 ; i < DATA_LEN - RANGE_WIDTH - 1 ; i++)
    {
       range[i] = *data_set.end() - *data_set.begin();
       multiset::iterator iter = data_set.find(data[i]);
       data_set.erase(iter);
       data_set.insert(data[i+1]);
    }
    range[i] = *data_set.end() - *data_set.begin();
    
    // range now holds the values you seek
    

    You should probably check this for off by 1 errors, but the idea is there.

提交回复
热议问题