leetcode 575. Distribute Candies
题意就是给定一个偶数个数的数组,然后其中的不同的数字代表不同的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 };