575. Distribute Candies的C++解法

来源:互联网 发布:python turtle 库手册 编辑:程序博客网 时间:2024/06/05 02:46

最多一个人只能分到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);    }};


原创粉丝点击