LeetCode 2860.让所有学生保持开心的分组方法数:排序+遍历

【LetMeFly】2860.让所有学生保持开心的分组方法数:排序+遍历

力扣题目链接:https://leetcode.cn/problems/happy-students/

给你一个下标从 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

解题方法:排序遍历

要选一个学生,那肯定是尽可能选值比较小的学生:

因为选中的学生要求“选中数”大于自己的值,选中的学生值越小越容易满足;

还因为未选中的学生要求“选中数”小于自己的值,未选中的学生值越大越容易满足。

所以按学生的值从小到大排个序,然后就能开始愉快地遍历学生了:

使用 i i i 1 1 1 n − 1 n-1 n1遍历,代表选中前 i i i个学生。

如果 i > n u m s [ i − 1 ] i\gt nums[i - 1] i>nums[i1],则说明选中数大于选中学生的值;如果 i < n u m s [ i ] i\lt nums[i] i<nums[i],则说明选中数小于未选中学生的值。

如果二者同时满足,则可行方案数加一。

注意,上述遍历过程中未考虑全选或全不选的情况:

如果所有学生的值都大于 0 0 0,则可以全不选;

因为没有学生的值大于等于学生个数,因此一定可以全选。

  • 时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn),其中 n = l e n ( n u m s ) n=len(nums) n=len(nums)
  • 空间复杂度 O ( log ⁡ n ) O(\log n) O(logn)

AC代码

C++
class Solution {
public:int countWays(vector<int>& nums) {sort(nums.begin(), nums.end());int ans = 1 + (*min_element(nums.begin(), nums.end()) > 0);for (int i = 1; i < nums.size(); i++) {ans += i > nums[i - 1] && i < nums[i];}return ans;}
};
Python
from typing import Listclass Solution:def countWays(self, nums: List[int]) -> int:nums.sort()ans = 1 + (nums[0] != 0)for i in range(1, len(nums)):ans += i > nums[i - 1] and i < nums[i]return ans
Go
package main
import "sort"func countWays(nums []int) int {sort.Ints(nums)ans := 1if nums[0] > 0 {ans++}for i := 1; i < len(nums); i++ {if i > nums[i - 1] && i < nums[i] {ans++}}return ans
}
Java
import java.util.List;
import java.util.Collections;class Solution {public int countWays(List<Integer> nums) {Collections.sort(nums);int ans = 1 + (nums.get(0) > 0 ? 1 : 0);for (int i = 1; i < nums.size(); i++) {ans += i > nums.get(i - 1) && i < nums.get(i) ? 1 : 0;}return ans;}
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/141905408

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pencils Protocol生态新进展,即将上线 Vault 产品

“极高的盈利预期、通证的持续回购与销毁&#xff0c;Vault产品的推出正在成为Pencils Protocol生态发展的重磅利好。” Pencils Protocol是目前Scroll生态TVL最高的DeFi平台 &#xff0c;即便是行情整体较为平淡&#xff0c;其仍旧能够保持在3亿美元左右的锁仓价值&#xff0c…

JS中【普通函数中的this】vs【箭头函数中的this】

在 JavaScript 中&#xff0c;this 关键字是一个非常重要的概念&#xff0c;它通常指向函数执行时的上下文对象。然而&#xff0c;箭头函数&#xff08;arrow functions&#xff09;中的 this 行为与普通函数不同&#xff0c;它的 this 是在函数定义时绑定的&#xff0c;并且无…

day35-测试之性能测试JMeter的测试报告、并发数计算和性能监控

目录 一、JMeter的测试报告 1.1.聚合报告 1.2.html报告 二、JMeter的并发数计算 2.1.性能测试时的TPS&#xff0c;大都是根据用户真实的业务数据&#xff08;运营数据&#xff09;来计算的 2.2.运营数据 2.3.普通计算方法 2.4.二八原则计算方法 2.5.计算稳定性测试并发量 2.6…

【数学建模】国赛论文模型的建立与求解写作指南

一、内容含义 1、模型的建立 模型的建立是将问题抽象成数学语言的表达式&#xff0c;它一定是在先前的问题分析和模型假设的基础上得来的。因为比赛时间很紧&#xff0c;大多数时候我们都是使用别人已经建立好的模型。这一部分需要将题目问的问题和模型紧密结合起来切记随意套…

Mybatis链路分析:JDK动态代理和责任链模式的应用

背景 此前写过关于代理模式的文章&#xff0c;参考&#xff1a;代理模式 动态代理功能&#xff1a;生成一个Proxy代理类&#xff0c;Proxy代理类实现了业务接口&#xff0c;而通过调用Proxy代理类实现的业务接口&#xff0c;实际上会触发代理类的invoke增强处理方法。 责任链功…

Mac 安装Hadoop教程(HomeBrew安装)

1. 引言 本教程旨在介绍在Mac 电脑上安装Hadoop&#xff0c;便于编程开发人员对大数据技术的熟悉和掌握。 2.前提条件 2.1 安装JDK 想要在你的Mac电脑上安装Hadoop&#xff0c;你必须首先安装JDK。具体安装步骤这里就不详细描述了。你可参考Mac 安装JDK8。 2.2 配置ssh环境…

【conda】导出和重建 Conda 环境

目录 1. 导出 Conda 环境1.1 激活环境1.2 导出环境配置1.3 检查和编辑环境配置文件&#xff08;可选&#xff09;1.4 共享或重建环境 2. 常见问题及解决方案2.1 导出环境时出现 “PackagesNotFoundError”2.2 导出的 environment.yml 文件在其他系统上无法使用2.3 导出的环境文…

【时时三省】c语言例题----华为机试题<求最大连续bit数>。

目录 1,题目 描述 输入描述: 输出描述: 示例1 2,代码 3,官方案例 山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 1,题目 HJ86 求最大连续bit数 描述 求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个…

Docker入门学习-01

Docker 官方文档 1. Docker 基础知识 1.1 什么是 Docker&#xff1f; Docker 是一个开源的平台&#xff0c;用于开发、交付和运行应用程序。它使用容器技术&#xff0c;将应用程序及其依赖打包在一个轻量级的可移植容器中。 1.2 Docker 的主要组件 镜像&#xff08;Image&a…

【计算机视觉前沿研究 热点 顶会】ECCV 2024中目标检测有关的论文

整值训练和尖峰驱动推理尖峰神经网络用于高性能和节能的目标检测 与人工神经网络(ANN)相比&#xff0c;脑激励的脉冲神经网络(SNN)具有生物合理性和低功耗的优势。由于 SNN 的性能较差&#xff0c;目前的应用仅限于简单的分类任务。在这项工作中&#xff0c;我们专注于弥合人工…

【CVPR‘24】DeCoTR:使用 2D 和 3D 注意力增强深度补全

DeCoTR: Enhancing Depth Completion with 2D and 3D Attentions DeCoTR: Enhancing Depth Completion with 2D and 3D Attentions 中文解析摘要介绍方法方法3.1 问题设置3.2 使用高效的 2D 注意力增强基线3.3 3D中的特征交叉注意力点云归一化位置嵌入3.4 捕捉 3D 中的全局上下…

分享GoFly项目案例-降本增效数字化解决多仓库、动态仓库(车辆存储)、动态调调度、动态配送方案

前言 传统的生产原料企业在数字化转型中&#xff0c;需要到一个客户与产品配送&#xff08;运输&#xff09;管理及调度系统。系统要达到管理者可以看到产品数据&#xff0c;做业务的可以了解到货品库存、货品位置&#xff08;可调度最近货品给客户&#xff09;、货品配送情况…

给鼠标一个好看的指针特效 鼠标光标如何修改形状?

许多爱美的小伙伴们都想着如何给自己的电脑打扮一下&#xff0c;用各种各样的途径来美化我们的电脑。今天我们给大家分享一下&#xff0c;如何美化鼠标效果&#xff0c;给鼠标指针修改成一个非常好看的形状~ 一起来看几组鼠标的效果&#xff0c;小编我给大家做了个录屏&#x…

linux文件——用户缓冲区——概念深度探索、IO模拟实现

前言&#xff1a;本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题&#xff0c; 然后通过分析问题&#xff0c; 将缓冲区的概念与原理一步一步地讲解。同时&#xff0c; 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf&#xff0c; fprintf接口&#xff0c…

OT安全零死角!Fortinet OT安全平台再升级

近日&#xff0c;专注推动网络与安全融合的全球网络安全领导者 Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;&#xff0c;宣布对旗下业界领先的OT安全平台进行新一轮全面升级&#xff0c;此次更新旨在深化安全组网与安全运营&#xff08;SecOps&#xff09;服务的功…

依托自研力量,给共享集群存储服务一个优选

YashanDB共享集群有三大关键组件&#xff0c;崖山集群服务&#xff08;YCS&#xff09;、崖山集群文件系统&#xff08;YFS&#xff09;、DB组件。上一篇共享集群系列文章《为何共享集群的高可用能力被频频称赞&#xff0c;它的机制有何不同&#xff1f;》深入解析了关键组件的…

NVIDIA RTX 50系列大爆料:功耗飙升600W,性能直逼RTX 4090 1.?倍,你准备好了吗?

在科技圈的万众瞩目下&#xff0c;知名硬件爆料大神Kopite7kimi再次为我们揭开了NVIDIA下一代GeForce RTX系列——“Blackwell”阵容的神秘面纱。这次&#xff0c;关于新显卡的功耗信息不再是模糊的概念&#xff0c;而是实实在在的数字&#xff0c;让人不禁对即将到来的性能飞跃…

ELK学习笔记(一)——使用K8S部署ElasticSearch8.15.0集群

一、下载镜像 #1、下载官方镜像 docker pull elasticsearch:8.15.0 #2、打新tag docker tag elasticsearch:8.15.0 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0 #3、推送到私有仓库harbor docker push 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0二、…

Python3.8绿色便携版安装版制作

Python 的绿色便携版有两种&#xff1a;官方 Embeddable 版本&#xff08;嵌入式版&#xff09;&#xff1b;安装版制作的绿色版。Embeddable 版适用于需要将 Python 集成到其他应用程序或项目中的情况,它不包含图形界面的安装程序&#xff0c;只提供了 Python 解释器和必要的库…

C# 使用国密SM4加密解密

首先需第三方Nuget包&#xff1a;Portable.BouncyCastle &#xff08;源码来自http://www.bouncycastle.org/csharp/&#xff09;&#xff0c;支持.NET 4,.NET Standard 2.0 目录 目录 使用BouncyCastle指定填充方案 零填充&#xff08;Zero Padding&#xff09; PKCS7填充…