当前位置: 首页 > news >正文

2860.让所有学生保持开心的分组方法数

1.题目描述

给你一个下标从 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 <= 105
  • 0 <= nums[i] < nums.length

2.解题思路

将所有人按照递增的顺序排列,遍历每一个位置,如果当前位置i被选中,那么被选中的人数就有i+1人,只需要判断i+1与第i个人及第i+1个人的大小关系即可,因为第i个人就是被选中人数中的最大值,第i+1个人就是未被选中人中的最小值,如果满足i+1 > nums[i]  and  i + 1 < nums[i+1],就令ans+=1,需要对选择0人和选择全部的人的边界情况进行特殊处理

3.代码实现

class Solution {public int countWays(List<Integer> nums) {Collections.sort(nums);int n = nums.size();int ans = 0;if (nums.get(0) > 0) {ans += 1;}if (nums.get(n-1) < n) {ans += 1;}for (int i = 0; i < n - 1; i++) {if (i + 1 > nums.get(i) && i + 1 < nums.get(i+1)) {ans += 1;}}return ans;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • UDS诊断 - DTC状态位
  • Unity SceneView 相机聚焦到指定位置
  • Linux awk案例
  • Qt模态对话框与非模态对话框
  • 手搓智能体第三弹之复刻 ⌈ AI智能搜索 ⌋
  • 【C++ 第十九章】异常
  • 哈希 详解
  • 10分钟了解OPPO中间件容器化实践
  • 专栏前言-WooYun漏洞库环境搭建
  • SaaS行业渠道管理的深度探索:两种增长模式哪个更强?
  • 非标机械设计项目“规范”笔记
  • 使用 Nginx 部署 Vue.js 前端项目指南
  • 王立铭脑科学50讲后续6,自己从课程中提起自己所需的知识,安放到自己的知识体系中。
  • Elasticsearch 向量数据库本地部署 及操作方法
  • OpenStack概论和部署
  • python3.6+scrapy+mysql 爬虫实战
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • C++类的相互关联
  • ES2017异步函数现已正式可用
  • exif信息对照
  • exports和module.exports
  • Github访问慢解决办法
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Laravel Telescope:优雅的应用调试工具
  • Redis中的lru算法实现
  • Selenium实战教程系列(二)---元素定位
  • vue-loader 源码解析系列之 selector
  • 代理模式
  • 第十八天-企业应用架构模式-基本模式
  • 回顾2016
  • 回流、重绘及其优化
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端自动化解决方案
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 原生JS动态加载JS、CSS文件及代码脚本
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #AngularJS#$sce.trustAsResourceUrl
  • #define与typedef区别
  • #if #elif #endif
  • #pragma data_seg 共享数据区(转)
  • #QT 笔记一
  • (2)nginx 安装、启停
  • (2015)JS ES6 必知的十个 特性
  • (3) cmake编译多个cpp文件
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (pytorch进阶之路)扩散概率模型
  • (四)stm32之通信协议
  • (一)Docker基本介绍
  • (转)甲方乙方——赵民谈找工作
  • .NET 5种线程安全集合
  • .Net 6.0 处理跨域的方式
  • .NET BackgroundWorker