classSolution { public: intmaxCoins(vector<int>& piles){ sort(piles.begin(), piles.end()); reverse(piles.begin(), piles.end()); int cnt = 0, sum = 0; int L = 0, R = piles.size() - 1; for (int L = 1; L < piles.size() && L < R; L += 2, R--){ sum += piles[L]; } return sum; } };
classSolution { private: int sum[505] = {0}; set<int> vis; public: intfindLatestStep(vector<int>& arr, int m){ int len = arr.size(); if(len == m) return m; vis.emplace(0); //相比于insert(),emplace()直接构造对象,效率更高 vis.emplace(len + 1); for (int i = len - 1; i >= 0; i--){ auto it = vis.upper_bound(arr[i]); //返回第一个大于arr[i]的元素迭代器 int L = *prev(it), R = *it; //prev()获取一个距离指定迭代器 n 个元素的迭代器,n取正数时,向左移动。 if(arr[i] - L - 1 == m || R - arr[i] - 1 == m) //注意,要-1,因为是两个0位之差 return i; vis.emplace(arr[i]); //分裂成两堆 } return-1; } };