std::pair<double, double> DetectorModule::minMaxEtaWithError(double zError) const { if (cachedZError_ != zError) { cachedZError_ = zError; double eta1 = (XYZVector(0., maxR(), maxZ() + zError)).Eta(); double eta2 = (XYZVector(0., minR(), minZ() - zError)).Eta(); double eta3 = (XYZVector(0., minR(), maxZ() + zError)).Eta(); double eta4 = (XYZVector(0., maxR(), minZ() - zError)).Eta(); cachedMinMaxEtaWithError_ = std::minmax({eta1, eta2, eta3, eta4}); //cachedMinMaxEtaWithError_ = std::make_pair(MIN(eta1, eta2), MAX(eta1, eta2)); } return cachedMinMaxEtaWithError_; }
int maximalSquare(vector<vector<char> > &m) { int sz = m.size(); if(sz == 0) return 0; int ans = 0; vector<int> h; h.resize(m[0].size()); fill(h.begin(), h.end(), 0); for(int i = 0; i < sz; i++) { for(int j = 0; j < m[i].size(); j++) { if(m[i][j] == '0') h[j] = 0; else h[j]++; } ans = max(ans, maxR(h)); } return ans * ans; }
int maxR ( int A[], int n ) { //数组求最大值算法(线性递归版) if ( 2 > n ) //平凡情况,递归基 return A[n - 1]; //直接(非递归式)计算 else //一般情况,递归:在前n - 1项中的最大值与第n - 1项之间,取大者 return max ( maxR ( A, n - 1 ), A[n - 1] ); } //O(1) * 递归深度 = O(1) * (n + 1) = O(n)