美文网首页
【算法题】100040. 让所有学生保持开心的分组方法数

【算法题】100040. 让所有学生保持开心的分组方法数

作者: 程序员小2 | 来源:发表于2023-09-17 07:47 被阅读0次

题目:

给你一个下标从 0 开始、长度为 n 的整数数组 nums ,其中 n 是班级中学生的总数。班主任希望能够在让所有学生保持开心的情况下选出一组学生:

如果能够满足下述两个条件之一,则认为第 i 位学生将会保持开心:

这位学生被选中,并且被选中的学生人数 严格大于 nums[i] 。
这位学生没有被选中,并且被选中的学生人数 严格小于 nums[i] 。
返回能够满足让所有学生保持开心的分组方法的数目。

示例 1:

输入:nums = [1,1]
输出:2
解释:
有两种可行的方法:
班主任没有选中学生。
班主任选中所有学生形成一组。
如果班主任仅选中一个学生来完成分组,那么两个学生都无法保持开心。因此,仅存在两种可行的方法。
示例 2:

输入:nums = [6,0,3,3,6,7,2,7]
输出:3
解释:
存在三种可行的方法:
班主任选中下标为 1 的学生形成一组。
班主任选中下标为 1、2、3、6 的学生形成一组。
班主任选中所有学生形成一组。

提示:

1 <= nums.length <= 10^5
0 <= nums[i] < nums.length

java代码:

class Solution {
    public int countWays(List<Integer> nums) {
        int[] a = nums.stream().mapToInt(i -> i).toArray();
        Arrays.sort(a);
        int n = a.length;
        int ans = a[0] > 0 ? 1 : 0; // 一个学生都不选
        for (int i = 0; i < n - 1; i++) {
            if (a[i] < i + 1 && i + 1 < a[i + 1]) {
                ans++;
            }
        }
        return ans + 1; // +1 是因为可以都选
    }
}

相关文章

  • 学习计划

    以做出心目中的网站为目标,学习相关的技术栈可以先从微信小程序开始学起来 算法 算法数上的所有算法都应该熟知 多刷题...

  • 算法题--爬楼梯的方法数

    0. 链接 题目链接 1. 题目 You are climbing a stair case. It takes ...

  • Java分组密码算法DES

    Java分组密码算法DES 1实验内容 掌握分组密码算法DES方法,能用高级语言实现分组密码算法DES。DES算法...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

  • 程序概述

    what 程序 == 指令+数据指令 == 算法数据 == 数据结构程序 == 算法 + 数据结构面向对象编程: ...

  • 笔记:综合技术

    综合技术 android 65535方法数限制原因 Android app中所有代码都放在dex文件中,dex中存...

  • 教师资格证面试真题——班内分组讨论,居然没人跟小明一组?

    真题:班内分组讨论问题时,没人愿意与小明一组,怎么办? 【参考答案】 在自行分组时,没学生愿意与小明一组,会让小明...

  • PHP SPL

    SPL就是标准库包括:迭代器,算法数据结构,堆。

  • 谈朋友圈好友标签分组合理性

    为什么要有朋友圈标签分组? · 不希望所有人看到所有内容 朋友圈标签分组是怎么一种算法? 典型场景中如何运用? 结...

  • Day 4 Project 预测你的下一道世界料理

    附:每日一题 几句话简述什么是梯度下降法,优点是什么,缺点是什么? 解答: 梯度下降算法数学原理为,梯度方向是函数...

网友评论

      本文标题:【算法题】100040. 让所有学生保持开心的分组方法数

      本文链接:https://www.haomeiwen.com/subject/dgoivdtx.html