【腾讯云智笔试题——分苹果时间复杂度和空间复杂度都是O(1)】

文章目录

  • 题目描述
  • 解题思路:
  • 思路讲解:

题目描述

有m个苹果,n个小孩。每个小孩都有一个编号,小明的编号是。要尽量公平的分苹果,相邻编号的小孩分到的苹果数目差距不能大于1。
请问如何在满足相邻编号的小孩分到的苹果数目差距不能大于1的情况下,小明分配到的苹果数目最多,并且输出这个最大值,每个小朋友至少需分配到一个苹果。

输入描述
第一行输入三个整数。

输出描述
输出一行,表示小明分配到苹果个数的最大值。

示例 1
4 6 2
输出
2

说明

可以这样分配1 2 2 1。可以小明分配到了2个苹果。
图片:
原题图片

解题思路:

首先我这边有两种思路,第一种是暴力时间复杂度是O(m),即苹果越多,时间越长,空间复杂度是O(n),因为根据小孩数量声明的切片,具体的地址在https://blog.csdn.net/m0_64941684/article/details/139796892?spm=1001.2014.3001.5501,第二种是利用高中数学中通过计算公式得出范围,不同范围内的苹果数是多少,因为全部是计算,不需要for循环所以时间复杂段和空间复杂度都是O(1),

代码如下

package mainimport ("fmt""math""os"
)// maxApplesForXiaoming 使用贪心策略计算小明最多能分到的苹果数
func maxApplesForXiaoming(m, n, k int) int {// 初始化小明最多能分到的苹果数为1maxApples := 1// 如果只有一个小孩,直接返回所有苹果if n == 1 {return m}if m < n {return -1}m = m - nvar big intvar small intif (k - 1) > (n - k) {big = k - 1small = n - k} else {big = n - ksmall = k - 1}// 确定小明的位置相对于序列长度的位置// 计算从左到小明处能分配的苹果数(等差数列求和)bigSum := (big * (big + 1)) / 2smallSum := (small * (small + 1)) / 2totalEquidifference := bigSum + smallSum + small*(big-small) + big + 1smallEquidifference := smallSum*2 + small + 1switch true {case m > totalEquidifference:maxApples = big + 1 + (m-totalEquidifference)/n + 1return maxApplescase m == totalEquidifference:maxApples = big + 1 + 1return maxApplescase m < totalEquidifference && m > smallEquidifference:maxApples = small + int(math.Sqrt(float64(2*(m-smallEquidifference)+((3+2*small)/2)*(3+2*small)))) - (3+2*small)/2 + 1return maxApplescase m == smallEquidifference:maxApples = small + 1case m < smallEquidifference:maxApples = int(math.Sqrt(float64(m))) - 1return maxApples + 1 + 1}return maxApples
}func main() {var n, m, k int_, err := fmt.Scanln(&n, &m, &k)if err != nil {fmt.Println("Error reading input:", err)os.Exit(1)}result := maxApplesForXiaoming(m, n, k)if result != -1 {fmt.Printf("小明最多能分到的苹果数为: %d\n", result)} else {fmt.Println("无法满足每个小孩至少分到一个苹果的条件")}
}

思路讲解:

通过n,m,k(小孩数量,苹果数量,和编号)进行计算在不同情况下计算方式不同,
首先我们假设编号处于中间,两边可以为0(即k为1或者n),不影响计算,
然后我们定义一些值:

  1. big 两边大的一边的长度,左边大为左边,右边大为右边
  2. small 两边小的一边的长度,左边小为左边,右边小为右边
    3.bigSum 大的等差总和,即大的那一边从边界到k编号的等差综合,因为边长为big,所以bigSun = (big * (big + 1)) / 2
  3. smallSun大的等差总和,即小的那一边从边界到k编号的等差综合,因为边长为small,所以smallSun = (small* (small + 1)) / 2

了解这些值之后我们就可以确定一些边界啦

  1. 边界1:左右两边都是等差,因为相邻孩子苹果数相差不超过1,所以小边等差末尾一般不为1(除非大小边相等),那么这种情况下所需要的苹果数之和是:
    totalEquidifference := bigSum + smallSum + small*(big-small) + big + 1
    在这里插入图片描述

  2. 边界2:小边是从1开始的等差的情况,所以大边的情况应该是和小边情况一样,所以这种情况下所需要的苹果数之和是:
    smallEquidifference := smallSum*2 + small + 1
    详解如图:
    在这里插入图片描述

根据两个边界可以得出几种情况:

  1. 大于边界1
    小明的苹果数:maxApples = big + 1 + (m-totalEquidifference)/n + 1
    边界1时小明苹果数为big+1+1(后面的1是初始没人都有一个苹果),接下来每多n个苹果就每人加1,且只有第n个才是小明的,

  2. 等于边界1
    maxApples = big + 1 + 1
    边界1时小明苹果数为big+1+1(后面的1是初始没人都有一个苹果)

  3. 边界1与边界2之间
    maxApples = small + int(math.Sqrt(float64(2*(m-smallEquidifference)+((3+2*small)/2)*(3+2*small)))) - (3+2*small)/2 + 1
    在这里插入图片描述

  4. 等于边界2
    maxApples = small + 1
    边界2时小明苹果数为small+1+1(后面的1是初始没人都有一个苹果)
    10.小于边界2
    maxApples = int(math.Sqrt(float64(m))) - 1
    在这里插入图片描述
    整体过程可能有点复杂,但主要思路就是找到边界然后在根据边界划分不同区域,在同一区域内数据变化是一致的,即可以计算的,那么就可以根据边界判断适合那种公式,从而计算得出结果。

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

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

相关文章

wsl2平台鸿蒙全仓docker编译环境快速创建方法

文章目录 1 文章适用范围&#xff1a;2 WSL环境安装3 镜像迁移非C盘4 Docker环境准备4.1 docker用户组和用户创建4.2 Docker环境配置4.2.1 Ubuntu下安装docker工具4.2.2 鸿蒙Docker环境安装4.2.3 鸿蒙全仓代码拉取编译 5 鸿蒙全仓代码的更新策略6 参考文献7 FAQ7.1 缺头文件xcr…

【0基础学爬虫】爬虫基础之自动化工具 Appium 的使用

大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0基础学…

CentOS 5(CentOS 6、Redhat 6)服务器配置VNC

一、配置服务器yum源 yum源&#xff08;本地、华为云、阿里云、网易&#xff09; 二、使用yum安装vnc服务 1、检查系统是否安装了vnc 和 vncserver&#xff0c; rpm -qa | grep vnc如果没有安装那就行自行下载安装&#xff08;我这里用yum安装了&#xff0c;vncserver安装需…

设计程序,实现高精度圆周率的计算和存储,使用线性表突破程序设计语言内置变量的数值和有效数字范围限制

一、使用线性表突破程序设计语言内置变量的数值和有效数字范围的限制&#xff0c;为了实现高精度圆周率的计算&#xff0c;先根据数学公式进行对PI高精度运算&#xff0c;如图1-1。根据这个数学公式 π2 0nn!2n1‼ 即 Rn1Rn*n2n1&#xff0c;R11&#xff0c;sum π2* n1∞Rn 来…

Redis学习|Redis基础知识、Redis五大数据类型、Redis三种特殊数据类型、Redis事务

Redis基础知识 redis默认有16个数据库&#xff0c;并且这个数量可以在conf配置文件中更改 默认使用的是第0个 可以使用 select 进行切换数据库! key *查看数据库所有的key 清除当前数据库 flushdb 清除全部数据库的内容FLUSHALL 为什么redis是6379!(了解一下即可!) Redis 是…

【算法】Graham 凸包扫描算法 ( 凸包概念 | 常用的凸包算法 | 角排序 | 叉积 | Python 代码示例 )

文章目录 一、Graham 凸包扫描算法1、凸包概念2、常用的凸包算法3、Graham 凸包扫描算法 二、Graham 算法前置知识点1、角排序2、叉积3、算法过程分析 三、代码示例1、完整代码示例2、执行结果 使用 Graham 算法绘制的凸包效果 : 博客代码下载 : https://download.csdn.net/d…

大模型之-Seq2Seq介绍

大模型之-Seq2Seq介绍 1. Seq2Seq 模型概述 Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是一种用于处理序列数据的深度学习模型&#xff0c;常用于机器翻译、文本摘要和对话系统等任务。它的核心思想是将一个输入序列转换成一个输出序列。 Seq2Seq模型由两个主…

企业微信,机器人定时提醒

场景&#xff1a; 每天定时发送文字&#xff0c;提醒群成员事情&#xff0c;可以用机器人代替 人工提醒。 1&#xff09;在企业微信&#xff0c;创建机器人 2&#xff09;在腾讯轻联&#xff0c;创建流程&#xff0c;选择定时任务&#xff0c;执行操作&#xff08;企业微信机…

未登录也能知道你是谁?浏览器指纹了解一下!

引言 大多数人都遇到过这种场景&#xff0c;我在某个网站上浏览过的信息&#xff0c;但我并未登录&#xff0c;可是到了另一个网站发现被推送了类似的广告&#xff0c;这是为什么呢&#xff1f; 本文将介绍一种浏览器指纹的概念&#xff0c;以及如何利用它来判断浏览者身份。…

FIddler+Proxifer 实现PC客户端抓包详细教程

文章目录 前言1、Proxifer下载和配置1.1、下载Proxifer1.2、Proxifier配置 2、FIddler下载和配置2.1、FIddler下载2.2、FIddler配置 3、三、为什么抓不到有些应用程序的HTTP(s)的包&#xff1f; 前言 一般在浏览器场景下&#xff0c;我们可以利用Fiddler很好的完成抓包&#x…

计算机网络学习3

文章目录 以太网的MAC帧格式虚拟局域网VLAN概述虚拟局域网VLAN的实现机制以太网的发展802.11无线局域网的组成无线局域网的物理层无线局域网的数据链路层---使用CSMA/CD协议802.11无线局域网的MAC帧 网络层网络层概述网际协议IP和4.2.1异构网络互联IPv4地址及其编址方法概述IPv…

webpack处理样式资源04--webpack入门学习

处理样式资源 本章节学习使用 Webpack 如何处理 Css、Less、Sass、Scss、Styl 样式资源 介绍 Webpack 本身是不能识别样式资源的&#xff0c;所以我们需要借助 Loader 来帮助 Webpack 解析样式资源 我们找 Loader 都应该去官方文档中找到对应的 Loader&#xff0c;然后使用…

osgearth提示“simple.earth: file not handled”

在用vcpkg编译完osg和osgearth后&#xff0c;为了验证osgearth编译是否正确&#xff0c;进行测试&#xff0c;模型加载代码如下&#xff1a; root->addChild(osgDB::readNodeFile("simple.earth")); 此时以为是simple.earth路径的问题&#xff0c;遂改为以下代码…

Kithara实时定时器

管理定时器和实时定时器 目录 管理定时器和实时定时器管理时间数据通用定时器编程初始化计时器删除计时器停止/启动/调整定时器备注RealTimer 备注项目实例项目结构项目源码 示例更多&#xff1a; 管理时间数据 在 Kithara RealTime Suite 中&#xff0c;所有时间值均以 100 ns…

Pikachu靶场--文件上传

参考借鉴 Pikachu靶场之文件上传漏洞详解_皮卡丘文件上传漏洞-CSDN博客 文件上传漏洞&#xff1a;pikachu靶场中的文件上传漏洞通关_pikachu文件上传通关-CSDN博客 client check 在桌面新建一个文件夹&#xff0c;准备一个hello.php文件&#xff0c;文件写入如下代码 <?p…

产品3D模型在线展示

产品3D模型可以向潜在客户提供360度的观察角度&#xff0c;比平面图形的效果更好。快速实现产品3D模型的在线展示最简单的方法是使用老子云3D可视老子云3D可视化的模型内嵌特性&#xff0c;无需任何开发工作&#xff0c;5分钟就可以完成&#xff1a; 老子云的模型内嵌功能&…

[YOLOv10:注意力机制的轻量化创新,MLCA在目标检测中的卓越表现]

本文改进:一种轻量级的Mixed Local Channel Attention (MLCA)模块,该模块考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果。 1.YOLOv10介绍 论文:[https://arxiv.org/pdf/2405.14458] 代码: https://gitcode.com/THU-MIG/yolov10?utm_source=csdn…

二叉树的基础讲解

二叉树在遍历&#xff0c;查找&#xff0c;增删的效率上面都很高&#xff0c;是数据结构中很重要的&#xff0c;下面我们来基础的认识一下。(高级的本人还没学&#xff0c;下面的代码用伪代码或C语言写的)我会从树&#xff0c;树的一些专有名词&#xff0c;树的遍历&#xff0c…

ROM以及ROM与RAM对比

1.ROM ROM最原始的定义是“只读存储器”&#xff0c;一旦写入原始信息则不能更改。所以ROM通常用来存放固定不变的程序、常数和汉字字库&#xff0c;甚至用于操作系统的固化。它与随机存储器可共同作为主存的一部分&#xff0c;统一构成主存的地址域。 现在已经发展出了很多R…

《模拟联合国2.9—团队协作》

感谢上海财经大学持续的邀请&#xff0c;今天在阶梯教室举办的《模拟联合国2.0—团队协作》沙盘课程圆满结束。尽管场地的限制带来了一定的挑战&#xff0c;但得益于系统思考中“结构影响行为”的原则&#xff0c;我得以在不同场景中巧妙设计课程结构&#xff0c;极大地促进了大…