C++ 接雨水,不看后悔系列,解一道高频面试题

Posted 灯火阑处

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 接雨水,不看后悔系列,解一道高频面试题相关的知识,希望对你有一定的参考价值。


这是一道同事讨论过的一道趣味题,综合了比较多的解题思想,其中有二分,递归,分治等思想。闲来抽空实现了下,如有错误请多多指出,或者有优化处请多多指出。逻辑不是很复杂,直接上代码吧。

//
//  main.cpp
//  面试题经典
//
//  Created by 于磊 on 2020/5/27.
//  Copyright © 2020 于磊. All rights reserved.
//

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
typedef vector<int>::const_iterator c_iter;
int Area = 0;

size_t Max(c_iter begin,c_iter end,const vector<int> water)
    return *max_element(begin, end);

size_t MaxIndex(c_iter begin,c_iter end,const vector<int> water)
    return max_element(begin,end) - begin;


int getAreaL(c_iter _begin,c_iter _end,const vector<int> _water )
    if (_begin == _end) 
        return 0;
    
    size_t _idx = MaxIndex(_begin, _end,_water);
    size_t _max = Max(_begin, _end,_water);
    if (_idx>0) 
        getAreaL(_begin, _begin +_idx, _water);
    
    while (_begin+_idx!=_end) 
        Area+=_max-*(_begin++ +_idx);
    
    return 0;


int getAreaR(c_iter _begin,c_iter _end,const vector<int> _water )
    if ( _begin-1 == _end ) 
        return 0;
    
    size_t _idx = MaxIndex(_begin, _end,_water);
    size_t _max = Max(_begin, _end,_water);
    auto maxIdx =_begin+_idx+1;
    if ( _idx<_end-_begin-1) 
        getAreaR(maxIdx, _end, _water);
    
    
    while (_begin!=maxIdx) 
        Area+=_max-*(_begin++);
    
    return 0;


int main(int argc, const char * argv[]) 
    vector<int> water;
    int i;
    std::cout << "please input number of water container end of by #\\n";
    while (cin >> i && i != '#') 
        water.push_back(i);
    
    size_t _idx = MaxIndex(water.begin(), water.end(),water);
    getAreaL(water.begin(), water.begin()+_idx, water);
    getAreaR(water.begin()+_idx, water.end(), water);
    cout<<"总共装水 "<<Area<<endl;
    return 0;


以上是关于C++ 接雨水,不看后悔系列,解一道高频面试题的主要内容,如果未能解决你的问题,请参考以下文章

❤️思维导图整理大厂面试高频数组12: 4种方法彻底解决接雨水问题, 力扣42❤️

[力扣上岸] 如何用贪心算法解出大厂爱考的接雨水问题?

怎么准备安全面试最高效?不看后悔系列

动态规划(DP)解积雨问题

js-面试官想知道你有多理解call,apply,bind-不看后悔系列

42. 接雨水-字节跳动高频题