亲爱的各位友友们,今天来给大家讲解一道力扣中等题,废话不多说,接下面我就浅浅分析下这个题吧,我一定能给你讲明白的😀😀😀
我们先来康康题目的意思啦,为了方便观看,我直接到力扣那里截了个屏过来✅
划重点
这道题免费哟,直接上链接🥰🥰🥰:让所有学生保持开心的分组方法数
为了方便观看,我直接截图过来,贴心吧😁😁😁
这个题只要大家想到了排序就能很快做出来咯
思路
我们先从小到大的排序
分两种情况
第一种
- 全选和全不选
1.如果 0<nums[0],那么可以全部不选
2.假设nums长度为len,如果 len > nums[len-1],那么表示可以全选
- 选部分
假设循环从下标0开始,用 变量i
表示,循环到下标i
时,被选中的人数 为i+1
个人;
若选第i+1个人且能保持开心:需要满足两个条件 i+1 > nums[i]
与 i+1 < nums[i+1]
,为什么会有i+1 < nums[i+1]
这个条件呢,是因为选了这个第i+1个人时,后面的人一定是没有选的,没有选又要保持开心,就得满足那个条件,因为排了序的,能够让i+1后面那个没有选又能保持开心的话,那么后面所有的人都能保持开心
好啦,我们来康康AC的代码吧
class Solution { public: int countWays(vector<int>& nums) { sort(nums.begin(),nums.end()); int len = nums.size(); int ans = (0<nums[0])+(len>nums[len-1]); for(int i=0;i<len-1;i++) if(i+1>nums[i]&&i+1<nums[i+1]) ans++; return ans; } };