leetcode 575. Distribute Candies

leetcode575题目链接

题意就是给定一个偶数个数的数组,然后其中的不同的数字代表不同的candy,把candy平均分给姐姐弟弟,就是分给两个人,求某个人最多可以获得几种类型的candy。

思路:水。就是排序,然后遍历就好,用一个last来保存上一个是什么,每次遇到一个不同的candy,res++,同时other也++,因为每次遇到一个不同的,由于题意要平均,相当于每次每个不同的都要分半个给otherone,遇到一个相同的,other就--,就相当于相同的两个,一人一个。结果就是res-other/2,当然当other为负数的时候,就是重复的太多,res表示总共有多少个不同,这时直接取res就好。

 1 class Solution {
 2 public:
 3     int distributeCandies(vector<int>& candies) {
 4         sort(candies.begin(),candies.end());
 5         int res=0,last=-1,other=0,size=candies.size();
 6         for(int i=0;i<size;i++){
 7             if(last!=candies[i]){
 8                 last=candies[i];
 9                 res++;
10                 other++;
11             }
12             else{
13                 other--;
14             }
15         }
16         return other>0?res-other/2:res;
17     }
18 };
原文地址:https://www.cnblogs.com/weedboy/p/6830132.html