575. Distribute Candies的C++解法

xiaoxiao2021-02-28  109

最多一个人只能分到candies.size()/2的不同种类的糖,只要遍历数组保证每次拿的糖种类不重复就可以了。注意测试数据的边界,有负数和很大的数。

class Solution { public: int distributeCandies(vector<int>& candies) { int l = candies.size()/2; int result = 0; int i = 0; vector<int> mark; mark.resize(200001, 1); while ((result < l) && (i<l*2)) { int a = candies[i]+100000; if (mark[a] < 0) i++; else { i++; result++; mark[a] = -mark[a]; } } return result; } }; 题解里用的是无序集合,用无序集合和candies.size()/2作比较,有两种方法,一种是手动遍历插入,一种是用迭代器新建:

class Solution { public: int distributeCandies(vector<int>& candies) { unordered_set<int> kinds; for (int kind : candies) { kinds.insert(kind); } return min(kinds.size(), candies.size() / 2); } }; class Solution { public: int distributeCandies(vector<int>& candies) { return min(unordered_set<int>(candies.begin(), candies.end()).size(), candies.size() / 2); } };

转载请注明原文地址: https://www.6miu.com/read-35327.html

最新回复(0)